码迷,mamicode.com
首页 > Web开发 > 详细

Asp.net MVC 视图(一)

时间:2016-04-07 01:02:53      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

一、指定视图

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 视图(一)

标签:

原文地址:http://www.cnblogs.com/newstar87/p/5361734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!