Asp.net MVC 视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Asp.net MVC 视图相关的知识,希望对你有一定的参考价值。

一、指定视图

return View();  在目录(/Views/ControllerName)下查找与Action名称相同的视图。

return View("OtherIndex");  在目录(/Views/ControllerName)下查找指定名称(OtherIndex)的视图。

return View("~/Views/Example/LastIndex.cshtml");  使用带有~符号的语法提供视图的完整路径。注意:文件扩展名.cshtml不可少,可以在查找视图时避开视图引擎的内部查找机制。

二、添加视图

Add View对话框

三、视图传值

数据从控制器传送到视图是通过一个名为ViewData的ViewDataDictionary(一个特殊的字典类)。

使用字典语法读值取值:ViewData["CurrentTime"]=DateTime.Now;

使用属性读取方式赋值取值:ViewBag.CurrentTime=DateTime.Now;

注意:ViewBag是ViewData的动态封装器。

区别:1、ViewData["LoginUser Message"]无法用ViewBag表示

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

  示例:@Html.TextBox("name",ViewBag.Name)无法通过编译

  解决方案:一、使用ViewData["name"];

       二、显示指出ViewBag.Name的值的类型:(string)ViewBag.Name或ViewBag.Name as string

Model是ViewData的属性,可以在视图中获取指定的模型对象。

控制器中:return View(albums); 这样就把值赋给ViewData.Model属性了

视图中:第一步:使用@using将类型所在的命名空间引入    例如:@using MvcFirst.Models

    第二步:使用@model告知视图是哪种类型的模型     例如:@model IEnumerable<Album>

经常在视图中使用的命名空间,建议在Views 目录下的web.config中声明
<system.web.webPages.razor>
...
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      ...
      <add namespace="MvcFirst.Models">
    </namespaces>
  </pages>
</system.web.webPages.razor>

问题:有时我们需要在一个视图上显示商品信息以及附带的其他信息(例如当前登录系统的用户名、商品买家账号等),但我们只有一个Model属性。

解决方案一:可以将这些数据存放在ViewBag属性中。

解决方案二:可以编写自定义的用于在视图上使用的模型类

示例:public class TempViewModel{public IEnumerable<People> employees{set;get;};public decimal totalsalary{set;get;}}

视图上使用:@model TempViewModel

以上是关于Asp.net MVC 视图的主要内容,如果未能解决你的问题,请参考以下文章

[MVC&Core]ASP.NET Core MVC 视图传值入门

ASP.NET MVC4 部分视图

ASP.NET MVC4 部分视图

asp.net mvc 中的部分视图

ASP.NET MVC 对于视图引擎的优化

Asp.net mvc和asp.net有啥区别?