现在的位置: 首页 > 移动开发 > 正文

ASP.NET MVC视图有哪些作用

2020年06月01日 移动开发 ⁄ 共 1249字 ⁄ 字号 评论关闭

  视图的职责是向用户提供用户界面,向它提供对模型的引用后,它会将模型转换为准备提供给用户的格式。下面学步园小编来讲解下ASP.NETMVC视图有哪些作用?

  ASP.NETMVC视图有哪些作用

  检查控制器提交的ViewDataDictionary(通过ViewData属性访问),另一部分是将其内容转换为HTML格式

  从ASP.NETMVC3开始,视图数据可以通过ViewBag属性访问,该属性是动态的,语法简单,可以访问通过ViewData属性访问的相同数据.封装了ViewData,因此可以用类似访问属性的语法来检索字典中的值,如:

  ViewBag.Message等同于ViewData[“Message”]

  两者的差异:1、只有当要访问的关键字是一个有效的C#标识符时,ViewBag才其作用

  如:在ViewBag[“KeyWithSpaces”]中存放一个值,那么将不能使用ViewBag访问改值

  2、该动态值不能作为一个参数传递给扩展的方法,因为C#编译器为了选择正确的扩展方法,在编译时必须知道每个参数的类型.

  如:@Html.TextBox(“name”,ViewBag.Name)会编译失败,如果想编译通过有两种方法1、使用ViewData[“Name”],2、(string)ViewBag.Name

  在强类型视图中,ViewDataDictionary拥有一个视图渲染的强类型模型对象,该模型可能代表了实际的域对象,为方便起见,该模型对象可以通过视图的Model属性进行引用.

  如:@{

  Layout=null;

  }

  

@ViewBag.Message

  控制器中的控制行为:

  PublicActionResultSample(){

  ViewBag.Message=“HelloWorld”;

  ReturnView(“Sample”);

  }

  注意:该控制器将ViewBag.Message属性设置为一个字符串,然后返回一个名为Sample的视图,该视图将显示传递给ViewBag.Message属性的值

  3.2指定视图

  默认情况下在控制器中的操作方法返回的View()视图即与控制器名去掉Controller同名的视图,如果需要向其指定不同的视图则需在View(“OtherView”)中指定要返回的视图名称即可

  在一些情况下需要指定完全位于不同的目录结构中的视图,这时可以用带有~符号的语法来提供视图的完整路径,如:

  PublicActionResultIndex()

  {

  ViewBag.Message=“HelloWorld”;

  ReturnView(“~/Views/Example/Index.cshtml”);

  }

  3.3强类型视图

  例:编写一个显示Album列表的视图,实现如下:

  PublicActionResultList()

  {

  Varablums=newList();

  For(inti=0;i<5;i++)   {   albums.Add(newAlbum{Title=“Olive”+i});   }   ViewBag.Albums=albums;   ReturnView(albums);   }   在视图中显示如下:   

      @foreach(varain(ViewBag.AlbumsasIEnumerable))

      {

      

  • @a.Title
  •   }

      

  但是在强类型视图中,可以这样实现:

  PublicActionResultList()

  {

  Varablums=newList();

  For(inti=0;i<5;i++)   {   albums.Add(newAlbum{Title=“Olive”+i});   }   ReturnView(albums);   }   视图中:   @modelIEnumerable

  

      @foreach(varpinModel)

      {

      

  • @p.Title
  •   }

      

  3.4视图模型

  视图通常需要显示各种没有直接映射到域模型的数据,可以通过编写自定义的视图模型类来实现

  ASP.NETMVC视图有哪些作用

  3.5添加视图

  lScaffoldTemplate

  ①Empty创建一个空视图,使用@model语法指定模型类型

  ②Create创建一个视图,其中带有创建模型新实例的表单,并为模型类型的每一个属性生成一个标签和编辑器

  ③Delete创建一个是视图,其中带有删除现有模型实例的表单,并为模型的每一个属性显示一个标签以及当前该属性的值

  ④Details创建一个视图,显示了模型类型的每一个属性的标签及相应值

  ⑤Edit创建一个视图,并带有编辑现有模型实例的表单,并未模型类型的每一个属性生成一个标签和编辑器

  ⑥List创建一个带有模型实例的表单,为模型类型的每一个属性生成一列,确保操作方法向视图传递的是IEnumerable类型,同时为执行创建/编辑/删除操作,视图还包含了指向操作的链接

  lReferencescriptlibiaries:指示创建的视图是否包含指向Javascript的文件集,当创建Create或Edit视图时,就需要选中这些项,如果实现客户端的验证也必须选中这些项

  3.6Razor视图引擎

  3.6.3代码表达式

  例:@{stringroot=“Olive”;}

  @root.Models

  想要输出结果为Olive.Models

  但是在实际的运行中会报错,提示string没有Models的属性,可以通过将表达式用圆括号括起来的方式进行解决,即:

  @(root).Models

  例:

  • Item_@item.Length
  •   期望的输出结果为

  • Item_3
  •   但是实际输出的是

  • Item_@item.Length
  •   出现这样的情况是因为Razor将其识别为邮箱地址了,

      我们只需加上圆括号即可,如:

  • Item_@(item.Length)
  •   此外如下想要输出@号,可以使用两个@@用来转义

      3.6.4Html编码

      在许多情况下需要用视图显示用户的输入,但是这样存在潜在的跨站脚本攻击,但是Razor表达式默认用HTML编码

      如下:@{stringmessage=“alert('Olive')”;}

      message

      这段代码则不会弹出提示框,显示如下:

      

    抱歉!评论已关闭.