一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 10
本文根据《Professional ASP.NET MVC 1.0》中微软牛人Scott Guthrie 提供免费下载的第一章,一步一步演示如何通过ASP.NET MVC 1.0 正式版创建NerdDinner 范例程序。对了解如何使用最新的ASP.NET MVC 1.0框架创建Web Application 非常有帮助。本文由
http://forum.entlib.com 开源论坛小组提供。关于本文的一些资源,请参考文章最后的链接。
前面系列文章:
本文继续学习之旅,一步一步通过ASP.NET MVC 1.0 实现NerdDinner 范例程序。
实现Index视图模板
现在我们开始实行Index视图模板 – 生成即将来临的宴会Dinners列表。首先,将光标定位在Index action方法(当然是在DinnersController类中),接着右键点击,选择弹出菜单中的Add View菜单项。
在弹出Add View对话框中,视图模板的名称为Index,选择Create a strongly-typed View 复选框。这里,我们选择NerdDinner.Models.Dinner 为模型类型,View Content 列表框选择List,用来生成初始的列表脚本。
点击Add按钮,Visual Studio 自动在\Views\Dinners目录创建新的Index.aspx 视图模板,且自动实现一个初始的实现,将传入到视图的数据以HTML表格的形式呈现。当我们运行范例程序时,访问/Dinners/地址,将看到如下的效果:
上面的表格显示即将来临的宴会Dinners列表,但是不是我们想要的格式。我们可以更新Index.aspx 视图模板,展示较少的列,并使用<ul> 元素来呈现列表,而不是使用表格。示例代码如下:
<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Upcoming Dinners</h2>
<ul>
<% foreach (var dinner in Model)
{ %>
<li>
<%= Html.Encode(dinner.Title) %>
on
<%= Html.Encode(dinner.EventDate.ToShortDateString())%>
@
<%= Html.Encode(dinner.EventDate.ToShortTimeString())%>
</li>
<% } %>
</ul>
</asp:Content>
上述代码使用var 关键字在foreach 循环语句中,循环Model中的每一个dinner对象。对C# 3.0不熟悉的人可能认为使用var 意味着dinner对象是late-bound,实际上这是编译器根据强类型Model (类型为IEnumerable<Dinner>)推断出dinner的类型,并编译本地变量dinner为Dinner类型,同时提供代码智能提示和编译期间的类型检查。
再次浏览器中访问/Dinners 地址时,发现视图已经更新了,显示效果如下:
现在看上去不错了,但还不够完美。最后一步是实现用户点击列表中每一条记录时,可以看到详细信息。通过使用HTML超链接指向DinnersController控制器的Details action方法,来实现这一点。
在Index视图中,有2种方法可以生成超链接。第一种方法是手动编写HTML的<a> 元素,<% %>代码块嵌在HTML <a>元素中,如下所示:
<% foreach (var dinner in Model)
{ %>
<li>
<a href="/Dinners/Details/<%= dinner.DinnerID %>"><%= Html.Encode(dinner.Title) %></a>
on
<%= Html.Encode(dinner.EventDate.ToShortDateString())%>
@
<%= Html.Encode(dinner.EventDate.ToShortTimeString())%>
</li>
<% } %>
第二种方法是利用ASP.NET MVC内置的Html.ActionLink() 辅助方法,该方法支持通过编程的方式创建HTML <a>元素,链接控制器Controller的另一个action方法。
<%= Html.ActionLink(dinner.Title, "Details", new { id=dinner.DinnerID }) %>
Html.ActionLink() 辅助方法的第一个参数是链接文本(示例代码是dinner的主题),第二个参数是控制器的action方法名称(示例代码是Details方法),第三个参数是一组传入给action方法的参数(以匿名类型的名称/值对的方式来实现)。上述代码中,指定链接的dinner的id参数。因为ASP.NET MVC默认的URL路由规则是{Controller}/{Action}/{id},Html.ActionLink() 辅助方法将生成如下的输出:
<a href="/dinners/Details/2">EntLib.com 开源ASP.NET论坛</a>
在Index.aspx视图文件中,我们将使用 Html.ActionLink() 辅助方法,让列表中的每一条记录指向正确的details地址:
<h2>
Upcoming Dinners</h2>
<ul>
<% foreach (var dinner in Model)
{ %>
<li>
<%= Html.ActionLink(dinner.Title, "Details", new { id=dinner.DinnerID }) %>
on
<%= Html.Encode(dinner.EventDate.ToShortDateString())%>
@
<%= Html.Encode(dinner.EventDate.ToShortTimeString())%>
</li>
<% } %>
</ul>
现在,我们再次访问/Dinners 网址,将看到如下的dinner list页面:
当我们点击dinners列表的任何一条记录,就可以进入dinner的详细页面:
相关资源下载链接:
1. ASP.NET MVC 1.0 正式版发布了!!!
2. 免费ASP.NET MVC eBook 向导-电子书下载