asp.net core系列 41 Web 应用 MVC视图

释放双眼,带上耳机,听听看~!
00:00
00:00

本文目录

一.MVC视图

  在Web开发的MVC和Razor中,都有使用视图,在Razor中称为\”页\”。.cshtml视图是嵌入了Razor标记的HTML模板。 Razor 标记使用C#代码,用于与HTML 标记交互以生成发送给客户端的网页。在MVC目录结构中,Views / [ControllerName] 文件夹下用于创建视图,其中Views/Shared 文件夹下的视图是控制器共享的视图。

  

  1.1  视图页Razor 标记

    下面是Views/Home 文件夹中创建一个 About.cshtml 文件,呈现的视图如下:

  1. @{
  2. ViewData[\"Title\"] = \"About\";
  3. }
  4. <h2>@ViewData[\"Title\"].</h2>
  5. <h3>@ViewData[\"Message\"]</h3>

     Razor 标记以 @ 符号开头。后面的大括号 { … } 括住的是 Razor 代码块,是运行 C# 语句。 只需用 @ 符号来引用值,即可在 HTML 中显示这些值。比如上面h2和h3标签。

 

  1.2 控制器指定视图

    通常以 ViewResult 的形式从Action返回结果到视图,这是一种 ActionResult结果类型(Web api中有讲到)。但通常不会这样做。 因为大多数控制器均继承自Controller,因此只需使用 View 方法即可返回 ViewResult。示例如下:

  1. public IActionResult About()
  2. {
  3. ViewData[\"Message\"] = \"Your application description page.\";
  4. return View();
  5. }

     View 方法有多个重载。 可选择指定:

  1. //要返回的显式视图
  2. return View(\"Orders\");
  3. //要传递给视图的模型(实体)对象
  4. return View(Orders);
  5. //视图和模型
  6. return View(\"Orders\", Orders);

 

  1.3 视图发现

    Action返回一个视图时, 这个过程叫“视图发现”。默认的 return View(); 将返回与当前Action方法同名的视图。搜索匹配的视图文件顺序规则如下:

  1. Views/[ControllerName]/[ViewName].cshtml
  2. Views/Shared/[ViewName].cshtml

    当return View()时,首先在 Views/[ControllerName] 文件夹中搜索该视图。 如果在此处找不到匹配的视图,则会在“Shared”文件夹中搜索该视图。

    在返回视图时,可以提供视图文件路径。 如果使用绝对路径(“/”或“~/”开头),必须指定 .cshtml 扩展名:

  1.   return View(\"Views/Home/About.cshtml\");

    也可使用相对路径在不同目录中指定视图,而无需指定 .cshtml 扩展名:

  1. return View(\"../Manage/Index\");

    可以用“./”前缀来指示当前的控制器特定目录:

  1. return View(\"./About\");

 

  1.4 向视图传递数据

    可以使用多种方法将数据传递给视图。包括:(1)强类型数据:viewmodel。(2)弱类型数据ViewData (ViewDataAttribute)、ViewBag。ViewBag  Razor 页中不可用。

    (1) 强类型数据 viewmodel

      在传递数据到视图中,最可靠的是使用强类型数据,因为编译时能检查并且有智能感知。在视图页中使用@model指令来指定模型(可以是实体或集合泛型实体)。如下所示,其中前端的WebApplication1.ViewModels.Address是实体类命令空间,通过后端返回view强类型映射:

  1. @model WebApplication1.ViewModels.Address
  2. <h2>Contact</h2>
  3. <address>
  4. @Model.Street<br>
  5. @Model.City, @Model.State @Model.PostalCode<br>
  6. <abbr title=\"Phone\">P:</abbr> 425.555.0100
  7. </address>
  1. public IActionResult Contact()
  2. {
  3. ViewData[\"Message\"] = \"Your contact page.\";
  4. var viewModel = new Address()
  5. {
  6. Name = \"Microsoft\",
  7. Street = \"One Microsoft Way\",
  8. City = \"Redmond\",
  9. State = \"WA\",
  10. PostalCode = \"98052-6399\"
  11. };
  12. //返回强类型
  13. return View(viewModel);
  14. }

   (2) 弱类型数据(ViewData、ViewData 属性和 ViewBag)

    视图还可以访问弱类型(也称为松散类型)的数据集合。可以使用弱类型数据集合将少量数据传入及传出控制器和视图。ViewData 属性是弱类型对象的字典。ViewBag 属性是 ViewData 的包装器,为基础 ViewData 集合提供动态属性。ViewData派生自 ViewDataDictionary,ViewBag派生自 DynamicViewData。

    ViewData 和 ViewBag 在运行时进行动态解析。 由于它们不提供编译时类型检查,因此使用这两者通常比使用 viewmodel 更容易出错。建议尽量减少或根本不使用 ViewData 和 ViewBag

 

    ViewData介绍

      下面是一个ViewData存储对象,在视图上强制转换为特定类型(Address)。

  1. public IActionResult SomeAction()
  2. {
  3. ViewData[\"Greeting\"] = \"Hello\";
  4. ViewData[\"Address\"] = new Address()
  5. {
  6. Name = \"Steve\",
  7. Street = \"123 Main St\",
  8. City = \"Hudson\",
  9. State = \"OH\",
  10. PostalCode = \"44236\"
  11. };
  12. return View();
  13. }
  1. @{
  2. // Since Address isn\'t a string, it requires a cast.
  3. var address = ViewData[\"Address\"] as Address;
  4. }
  5. @ViewData[\"Greeting\"] World!
  6. <address>
  7. @address.Name<br>
  8. @address.Street<br>
  9. @address.City, @address.State @address.PostalCode
  10. </address>

   

    ViewData 特性介绍

      可以在控制器或 Razor 页面模型上,使用 [ViewData] 修饰属性。下面是一个示例:

  1. public class HomeController : Controller
  2. {
  3. [ViewData]
  4. public string Title { get; set; }
  5. public IActionResult About()
  6. {
  7. Title = \"About Us\";
  8. ViewData[\"Message\"] = \"Your application description page.\";
  9. return View();
  10. }
  11. }
  1. //通过字典key取出
  2. <title>@ViewData[\"Title\"] - WebApplication</title>

     

    ViewBag介绍

      ViewBag 不需要强制转换,因此使用起来更加方便。下面示例如下:   

  1. public IActionResult SomeAction()
  2. {
  3. // Greeting不需要先声明,Address 也一样,因为是Dynamic类型
  4. ViewBag.Greeting = \"Hello\";
  5. ViewBag.Address = new Address()
  6. {
  7. Name = \"Steve\",
  8. Street = \"123 Main St\",
  9. City = \"Hudson\",
  10. State = \"OH\",
  11. PostalCode = \"44236\"
  12. };
  13. return View();
  14. }
  1. @ViewBag.Greeting World!
  2. <address>
  3. @ViewBag.Address.Name<br>
  4. @ViewBag.Address.Street<br>
  5. @ViewBag.Address.City, @ViewBag.Address.State @ViewBag.Address.PostalCode
  6. </address>

   

    更多视图功能包括:标记帮助程序、服务注入视图,视图组件等

 

  参考文献

    ASP.NET Core MVC 中的视图

站长资讯

基于Vue.js的uni-app前端框架结合.net core开发跨平台project

2020-11-9 3:45:13

站长资讯

手把手教你实现一个引导动画

2020-11-9 3:45:15

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索