View包括两个部分,一个是UI的展示,另一个是用户的输入数据。通过使用ViewModel,可以有效降低UI管理的复杂度,同时充分利用智能感知提高代码编写效率。
ASP.NET MVC恰好支持这种强类型的View模型,如
先定义一个ViewModel
public class UserInput
{
public string Name { get; set; }
public int Point { get; set; }
}
再新建一个View引用这个Model
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MyMVC.Models.UserInput>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
UserSubmit
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>UserSubmit</h2>
<%= Model.Name %>
</asp:Content>
这样便实现了强类型的ViewModel,这个ViewModel承担着Controller与View的数据桥梁的作用,除了这种ViewModel的方式,Controller还可以通过ViewData这个字典绑定数据,如:
public class SubmitController : Controller
{
//
// GET: /Submit/
public ActionResult Index()
{
ViewData.Add("Name", "Test");
return View();
}
}
这种方式维护成本较高且代码编写效率也不高,一般不推荐使用。
当View中既有展示的数据,还有用户输入的数据时,则需要在ViewModel中添加相应的数据项,如:
public class UserInput
{
public string Name { get; set; }
public int Point { get; set; }
public class UserProfile {
public string Address { get; set; }
public bool IsDefault { get; set; }
}
public List<UserProfile> Profiles { get; set; }
}
这种嵌套定义的方式能够保持ViewModel的完整性,全部数据项都在一个类里,维护起来比较容易,但是如果数据结构复杂时,比如:数据项比较多,涉及多个集合类等等,也许还会增加复杂度,当尚处于控制的状态中。

浙公网安备 33010602011771号