一,基本概念:

1,尽管在action 方法中可以写代码拼装HTML,通过Response.Write() 方法返回给客户端,但是这种方法并不可取。更好的办法是,在action 方法中仅仅处理业务和数据逻辑,并将相关的数据传递给单独的视图(view)模板,view 负责生成HTML 展示。随后我们会看到,view 模板就是一个简单的文本文件,通常包含HTML 标识和嵌入的脚本。

2,可以使用(.aspx)、master page (.master)、和用户控件(.ascx)作为视图(view)。

3,约定视图放在Views目录下。控制器会先查找Views/{ControllerName}目录,如果没找到,会继续查找Views/Shared/目录,如仍然为找到,会报出错误信息。

4,当视图模板和控制器调用的action 方法有相同的名称时,开发人员可以不必显式指定视图模板的名称。我们仅仅需要传递模型对象给View() 辅助方法(不需要制定视图名称),ASP.NET MVC 将自动推断出我们使用的视图 \Views\[controllerName]\[ActionName],并展示结果。这样,我们可以稍微简洁一些代码,避免在代码中重复view 的名称。

二、使用视图(View):

使用视图模板返回HTML,我们调用Controller 基类的View()方法来返回 ViewResult 对象。

public ActionResult Details(int id) {
Dinner guestBook = guestBookRepository.GetDinner(id);//返回一个guestBook对象
if (guestBook == null)
return View("NotFound");
else
return View("Details", guestBook);
}

上面代码中,我们使用的View() 辅助方法的原型如下:
Asp.net Mvc(4) View
View() 辅助方法的第一个参数是view 模板文件,用来生成HTML 响应。第二个参数是model 对象,包含了view 模板生成HTML 响应所需要的数据。
在Details() action 方法中,我们通过id 值检索特定的guestBook对象。如果有找到guestBook对象,则调用View()方法,使用Details 视图模板展示检索到的guestBook对象。如果没有找到guestBook对象,则使用NotFound视图模板展示一个错误信息,表示 guestBook对象不存在(一个重载的View() 方法仅仅需要传入视图模板名称 – View(“NotFound”))。

三、实现NotFound视图模板:

我们开始实行NotFound 视图模板 – 显示一条友好的错误信息,说明请求的留言(guestBook)没有找到。
首先将光标定位在一个controller action 方法体中,然后右键点击,在弹出菜单中选择Add View 菜单项,
就可以创建一个新的视图模板了,如下图所示。

Asp.net Mvc(4) View
在弹出的Add View 对话框,输入NotFound,如下图所示。默认情况下,对话框中的视图名称就与光标
所在的action 方法中的视图名称一致,这里为Details。因为我们第一步实现NotFound 视图模板,因此
在这里需要更名为NotFound。

Asp.net Mvc(4) View

点击Add 按钮,Visual Studio 将在\Views\Dinners 目录创建一个新的NotFound.aspx 视图模板,如果该目
录不存在,也会自动创建目录。
默认情况下,视图模板有2 个content regions,可以用来放置内容和代码。第一块允许我们定制HTML
页面的标题,第二块允许我们定制HTML 页面的主要内容(main content)。
Asp.net Mvc(4) View
为了实现NotFound 实体模板,我们添加了一些基本的内容,如下图所示:
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
留言未找到
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>留言未找到</h2>
<p>抱歉 - 留言不存在或者已被删除。</p>
</asp:Content>
下面运行NerdDinner 范例程序,并在浏览器地址栏输入:/guestbook/Details/123456。该guestbook 在数据库中根本不存在,因此guestbookController.Details() action 方法将呈现NotFound 视图模板,如下图所示:

Asp.net Mvc(4) View

你可能会注意到上图中,我们创建的视图模板继承了其他HTML 脚本,显示在主要内容周围。这是因为
我们创建的视图模板使用了Master Page 模板,在整个站点实现一致的布局效果。

四、实现Details视图模板:

下面,我们将实现Details 视图模板,用来显示单一guestbook 模型的数据。首先,将光标定位到Details action方法(当然是在guestbookController 控制器代码窗口),右键点击,在弹出的菜单中选择Add View 菜单项。

Asp.net Mvc(4) View
与上一步创建NotFound 视图模板一样,将弹出Add View 对话框。这里,我们使用默认的Details 作为视图名称,另外选择Create a strongly-typed View(创建强类型视图)复选框,并从下拉列表框中选择从Controller 传递到View 的Model 模型类型。针对正在创建的Details 视图,我们将传递guestbook 对象(该类型完整的名称是MvcApplication7.Models.Guestbooks)。
注意:如使用的LINQ to SQL, 把表拖拽到o/r设计器中,保存后,要重新生成项目,才能在创建强类型中看到。
如下图所示:
Asp.net Mvc(4) View

与NotFound 视图模板创建Empty View 不一样,这里我们选择Details 模板。如上图所示,在View Content下拉列表框中选择Details 选项。系统将根据传入的GuestBook 模型自动为details 视图模板生成一个原始的实现。这样,方便我们快速开始视图模板的实现。
在点击Add 按钮之后,Visual Studio 自动在\Views\GuestBook 目录下创建Details.aspx 视图模板。

Asp.net Mvc(4) View
在Details.aspx 视图模板中,已经根据GuestBook 模型创建一个初始的实现。VS 引擎使用.NET 发射机制,查询模型类的所有公共属性,并自动根据每一个字段的类型,添加相应的内容到视图模板中。

Asp.net Mvc(4) View
下面,我们运行Web 应用程序,并在地址栏中输入/guestbook/Details/1,可以看到Details 视图的显示信息。使用这一URL 地址,可以显示我们前面在GuestBooks 数据表中手动插入的记录,如下图所示:

Asp.net Mvc(4) View

就这么简单和快速,Details.aspx 页面提供了一个初始的实现。下面,我们将根据需要,进一步定制用户界面。当我们仔细查看 Details.aspx 页面时,发现该页面包含一些静态的HTML 和嵌入展示代码。在视图模板呈现时,<% %> 代码块就会执行,<%= %> 代码块执行其中的代码,并呈现结果到视图的输出中展示。
我们也可以在视图中编写代码,通过使用强类型的Model 属性,访问传入到Controller 控制器的guestbook模型对象。在访问Model 属性时,Visual Studio 编辑器提供了代码智能提示,如下图所示。

Asp.net Mvc(4) View

五、辅助方方:

辅助方法用来在视图模板中帮助生成HTML界面。
MVC 框架提供了如下辅助方法:
(1)Form 辅助方法 – 用于表单元素,如单选按钮、列表、下拉列表、文本框、textarea、隐藏字段、密码字段等等。
(2)URL 辅助方法 – 让你生成 URL 路径。
(3)HTML 辅助方法 – 提供管理HTML 字符串的方法,如Encode、Decode、AttributeEncode和RenderPartial等等。

例如:有2 种方法可以生成超链接。第一种方法是手动编写HTML 的<a> 元素,<% %>代码块嵌在HTML <a>元素中,如下所示:

Asp.net Mvc(4) View
第二种方法是利用ASP.NET MVC 内置的Html.ActionLink() 辅助方法,该方法支持通过编程的方式创建HTML <a>元素,链接控制器Controller 的另一个action 方法。
<%= Html.ActionLink("编辑", "Edit", new { id=Model.id }) %>

Html.ActionLink() 辅助方法的第一个参数是链接文本(示例代码是编辑),第二个参数是控制器的action 方法名称(示例代码是Edit 方法),第三个参数是一组传入给action 方法的参数(以匿名类型的名称/值对的方式来实现)。上述代码中,指定链接的guestbook 的id 参数。因为ASP.NET MVC 默认的URL 路由规则是{Controller}/{Action}/{id},Html.ActionLink() 辅助方法将生成如下的输出:

<a href="/guestbook/edit/1">编辑</a>

下一节中我们介绍局部视图。

---------------------------------------------

参考资源:

MVC 应用程序中的视图和UI呈现
http://forum.entlib.com/Default.aspx?g=posts&t=936
一步一步学asp.net_mvc_中文版.pdf
http://wenku.baidu.com/view/2be68e6a561252d380eb6e0a.html

相关文章: