您的位置:首页 > 编程语言 > ASP

ASP.NET MVC框架之视图View(五)

2010-06-20 16:41 585 查看
一,基本概念:

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() 辅助方法的原型如下:



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 菜单项,
就可以创建一个新的视图模板了,如下图所示。



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



点击Add 按钮,Visual Studio 将在/Views/Dinners 目录创建一个新的NotFound.aspx 视图模板,如果该目
录不存在,也会自动创建目录。
默认情况下,视图模板有2 个content regions,可以用来放置内容和代码。第一块允许我们定制HTML
页面的标题,第二块允许我们定制HTML 页面的主要内容(main content)。



为了实现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 视图模板,如下图所示:



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

四、实现Details视图模板:

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



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



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



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



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



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



五、辅助方方:

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

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



第二种方法是利用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>

下一节中我们介绍局部视图。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐