【ASP.NET MVC系列】浅谈ASP.NET MVC 视图


ASP.NET MVC系列文章

【01】浅谈Google Chrome浏览器(理论篇)

【02】浅谈Google Chrome浏览器(操作篇)(上)

【03】浅谈Google Chrome浏览器(操作篇)(下)

【04】浅谈ASP.NET框架   

【05】浅谈ASP.NET MVC运行过程    

【06】浅谈ASP.NET MVC 控制器   

【07】浅谈ASP.NET MVC 路由   

【08】浅谈ASP.NET MVC 视图 

【09】浅谈ASP.NET MVC 视图与控制器传递数据

【10】浅谈jqGrid 在ASP.NET MVC中增删改查     

【11】浅谈ASP.NET 页面之间传值的几种方式

【12】浅谈缓存技术在ASP.NET中的运用       

【13】浅谈NuGet在VS中的运用      

【14】浅谈ASP.NET 程序发布过程           

【15】浅谈数据注解和验证           

【ASP.NET MVC】View与Controller之间传递数据

由于本篇文章关于页面之间传值讲得比较详细,因此这里就不分析了。

3.我们来分析一下,为什么使用弱型别来传递不是很方便的原因

关于这个例子,只举例ViewBag(ViewData和TempData差不多原理)

 (1)在控制器PartialViewDemo中添加方法

 /// 
        /// 弱类型视图,使用ViewBag来传递数据
        /// 
        /// 
        public ActionResult RuoLeiXingView()
        {
            List List_UserInfo = new List();
            for (int i = 0; i < 2; i++)
            {
                List_UserInfo.Add(new UserInfo() { UserName = "Alan_beijing" + i, UserAddress = "上海" });
            }
            ViewBag.List_UserInfo = List_UserInfo;
            return View();
        }

(2)在视图中接收数据

@{
    Layout = null;
}





    
    RuoLeiXingView


    
@foreach(ViewDemo.Models.UserInfo V_UserInfo in (ViewBag.List_UserInfo as IEnumerable)) { @V_UserInfo.UserName @V_UserInfo.UserAddress
}

我们发现在枚举之前,需要将动态的ViewBag.List_UserInf 转化为IEnumerable类型,比较麻烦,当然,你可以使用Dynamic代替





    
    RuoLeiXingView


    
@foreach(dynamic D_UserInfo in ViewBag.List_UserInfo) { @D_UserInfo.UserName @D_UserInfo.UserAddress
}
  

使用Dynamic似乎方便了许多,但细心的你可能已经发现,变量没有了智能感应功能。

到此,大家应该明白了ViewBag的不方便性了,当然,细心的你又会发现,强类型视图,刚好具备如上两个优势。

(四)部分视图

 何为“分布视图”?在WebForm开发中,我们经常用到用户自定义控件,其作用是提高代码的复用性,减少代码的冗余,使程序更加模块化,那么,在ASP.NET MVC中,对应地引入了基于Razor结构的分布页,其作用与

WebForm开发中的用户自定义控件差不多。

1. 创建分布页

我们在/Views/Shared文件夹下创建一个分布页_PartialPageDemo.cshtml,并向该页面中添加一段代码:

我是分布页

创建过程如下:

2.调用分布页

(1) 添加控制器PartialViewDemo和视图Index.cshtml

(2)在Index.cshtml页面中调用_PartialPageDemo.cshtml

3.调用分布页的几种方式

方式一:

@Html.Partial()

方式二:

@Html.Action()

方式三:

 通过Ajax方式调用;

 三  Razor语法

 Razor视图引擎是ASP.NET MVC3中新扩展的内容,并且也是他的默认视图引擎,其设计理念是:简单直观。Razor视图引擎可分为MVC和WebForm视图引擎,基于篇幅限制,本文只分析MVC Razor视图引擎。Razor中的核心转

换符"@",代表:标记-代码或代码-标记的意思。一般有两种基本转换,即代码表达式和代码块。

(一)代码表达式

1.支持隐式代码表达式求解

这个特性,在强类型视图中,体现得很明显。

    @foreach(UserInfo V_UserInfo in Model) { @V_UserInfo.UserName @V_UserInfo.UserAddress
    }

2.支持显示代码表达式

1+2=@(1+2)

 3.Razor十分智能,可以知道表达后面的空格字符不是一个有效的标识符,所以它可以顺畅地转回到标记语言。

4.自动识别邮件格式

会自动识别邮件,而并不是当作变量。

@www.qq.com

5.支持文本量

@{

      string  BlogName="Alan_beijing";
 }
@BlogName.Views

这段代码回提示错误,提示string没有Views属性。

其实我们想要输出的结果:Alan_beijing.Views,但@BlogName.Views  ,View被解析为BlogName的一个属性,因此出错,此时,应用字面量

@{

      string  BlogName="Alan_beijing";
 }
@(BlogName).Views

6.支持转义字符

如我想输出:@Alan_beijing

@@Alan_beijing

(二)支持HTML编码

我们知道,在防止XSS攻击时了(跨站脚本注入攻击) ,首先要做到HTML编码,Razor刚好是HTML编码的。

@{

     string message="";

}
@message

 这段代码不会弹出警告框而只会呈现编码的HTML

&alt;script>alert('haacked!');&alt;/script>

这里不论述这个,后在【ASP.NET MVC系列】的后续篇幅中,专门讲解。

(三) 代码块

这个大家应该用的比较多,foreach

    @foreach(UserInfo V_UserInfo in Model) { @V_UserInfo.UserName @V_UserInfo.UserAddress
    }

四  对视图的基本操作

 ASP.NET MVC 提供的模板中,当创建View时,提供了六种模型,分别为Create,Delete,Detail,Edit,Empty,Empty(不具有模型),List。基于该模型,我们可以轻松地创建具体实体的增删改查。由于比较简单,本例只

简单结合UserInfo实体演示Create,其他操作,请读者自行操作,原理思路一样,这里不一 一论述。

 我们创建一个基础UserInfo实体的Create

测试结果

四   参考文献

【01】【01】ASP.NET MVC5 高级编程(Jon Galloway,Brad Wilson,K.Scott Allen,David Matson ,孙远帅 译)

【02】APS.NET MVC4

五  版权区

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
  • 可以转载该博客,但必须著名博客来源。