注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一车,一房,一个温暖家

10万左右的车,80平方的房子,这是我奋斗的暖暖的家

 
 
 

日志

 
 

引用 ASP.NET MVC框架之视图View(六)   

2015-06-25 06:42:26|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本系列文章转载自:http://hi.baidu.com/wikiweb  感谢作者!

一,基本概念:

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框架之视图View(六) - Great Wang - 追求属于自己的一切!
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框架之视图View(六) - Great Wang - 追求属于自己的一切!
在弹出的Add View 对话框,输入NotFound,如下图所示。默认情况下,对话框中的视图名称就与光标
所在的action 方法中的视图名称一致,这里为Details。因为我们第一步实现NotFound 视图模板,因此
在这里需要更名为NotFound。

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!

点击Add 按钮,Visual Studio 将在\Views\Dinners 目录创建一个新的NotFound.aspx 视图模板,如果该目
录不存在,也会自动创建目录。
默认情况下,视图模板有2 个content regions,可以用来放置内容和代码。第一块允许我们定制HTML
页面的标题,第二块允许我们定制HTML 页面的主要内容(main content)。
ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!
为了实现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框架之视图View(六) - Great Wang - 追求属于自己的一切!

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

四、实现Details视图模板:

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

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!
与上一步创建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框架之视图View(六) - Great Wang - 追求属于自己的一切!

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

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!
在Details.aspx 视图模板中,已经根据GuestBook 模型创建一个初始的实现。VS 引擎使用.NET 发射机制,查询模型类的所有公共属性,并自动根据每一个字段的类型,添加相应的内容到视图模板中。

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!
下面,我们运行Web 应用程序,并在地址栏中输入/guestbook/Details/1,可以看到Details 视图的显示信息。使用这一URL 地址,可以显示我们前面在GuestBooks 数据表中手动插入的记录,如下图所示:

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!

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

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!

五、辅助方方:

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

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

ASP.NET MVC框架之视图View(六) - Great Wang - 追求属于自己的一切!
第二种方法是利用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


 

  评论这张
 
阅读(17)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018