显示数据
MVC架构依赖于模型、视图和控制器,虽然彼此分离,但是确实同心协力工作在一起。这种关系中,控制器充当了“交警”的角色。协调系统的不同部分执行不同的应用处理逻辑。这些处理过程可能会返回一些特定的数据给用户。但是,显示数据的工作却不属于控制器,这是视图的职责。那么,控制器如何与视图交互呢?
ASP.NET MVC提供了两种方式在mvc边界之间传递数据:ViewData 和TempData。所以,从控制器向视图传递数据就变得非常简单,只需要在控制器里赋值即可。如下:
public ActionResult About()
{
ViewData["Username"]="孙业宝";
ViewData["CompanyDescription"]="北京开创联合科技有限公司";
return View("About");
}
在视图文件中使用这个值:
<h1>@ViewData["Username"]</h1>
<div>@ViewData["CompanyDescription"]</div>
通过ViewBag访问ViewData的值
暴露ViewData属性的ASP.NET MVC控制器和视图同样暴露了一个叫做ViewBag相似的属性。ViewBag只是把暴露的ViewData简单包装成一个dynamic动态对象。
如下:
视图模型
除了基本的字典行为,ViewData对象也提供了Model属性,这是请求的原始模型对象。虽然ViewData.Model与ViewData["Model"]一样,但是它提升了模型对象的级别为一级,认为比其他数据更重要。
用法如下:先在Model中封装一个实体类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Ebuy.Models
{
public class CompanyInfo
{
public string Name { get; set; }
public string Description { get; set; }
}
}
在Cotroller中这样使用:
var company = new CompanyInfo { Name="小魏魏",Description="华泰大通财富投资(北京分公司)"};
return View("About",company);
注意添加命名空间引用
强类型视图
在默认情况下,Model属性可以在Razor视图里访问,并且是动态类型,这意味着可以直接访问这个类型,而不需要知道它的准确类型。但是,考虑到C#语言的静态属性以及Visual Studio对Razor视图强大的智能感知支持,最好还是明确页面模型的具体类型。用法如下:
也可以直接这样搞
<h3>@Model.Name</h3>
<h4>@Model.Description</h4>
HTML 和URL帮助方法
绝大部分WEB请求的目标都是向用户发送Html代码。正因为如此,ASP.NET MVC会尽力帮助你去创建HTML。除了Razor标记语言,ASP.NET MVC也提供了很多生成HTML的简单,有效的方式。最重要的两个帮助类 就是HtmlHelper类和UrlHelper类,作为控制器和视图的Html和Url属性暴露出来。用法如下:
<img src='@Url.Content("~/Content/images/test.jpg")' /><br />
@Html.ActionLink("HtmlHelper生成a标签测试","Index","Home")
浙公网安备 33010602011771号