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 视图的主要内容,如果未能解决你的问题,请参考以下文章