一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9


一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9
 
本文根据《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 范例程序。
 
实现Details视图模板
下面,我们将实现Details视图模板,用来显示单一Dinner模型的数据。首先,将光标定位到Details action方法(当然是在DinnersController控制器代码窗口),右键点击,在弹出的菜单中选择Add View菜单项。
 
与上一步创建NotFound视图模板一样,将弹出Add View对话框。这里,我们使用默认的Details作为视图名称,另外选择Create a strongly-typed View(创建强类型视图)复选框,并从下拉列表框中选择从Controller传递到View的Model模型类型。针对正在创建的Details视图,我们将传递Dinner对象(该类型完整的名称是NerdDinner.Models.Dinner)。如下图所示:
 

 
与NotFound视图模板创建Empty View不一样,这里我们选择Details模板。如上图所示,在View Content下拉列表框中选择Details选项。系统将根据传入的Dinner模型自动为details视图模板生成一个原始的实现。这样,方便我们快速开始视图模板的实现。
在点击Add 按钮之后,Visual Studio 自动在\Views\Dinners目录下创建Details.aspx视图模板。
 
 
在Details.aspx视图模板中,已经根据Dinner模型创建一个初始的实现。VS 引擎使用.NET发射机制,查询模型类的所有公共属性,并自动根据每一个字段的类型,添加相应的内容到视图模板中。
 

 
下面,我们运行NerdDinner Web应用程序,并在地址栏中输入/Dinners/Details/2,可以看到Details视图的显示信息。使用这一URL地址,可以显示我们前面在Dinners数据表中手动插入的记录,如下图所示。
 
 
就这么简单和快速,Details.aspx页面提供了一个初始的实现。下面,我们将根据需要,进一步定制用户界面。当我们仔细查看Details.aspx页面时,发现该页面包含一些静态的HTML和嵌入展示代码。在视图模板呈现时,<% %> 代码块就会执行,<%= %> 代码块执行其中的代码,并呈现结果到视图的输出中展示。
我们也可以在视图中编写代码,通过使用强类型的Model属性,访问传入到Controller控制器的Dinner模型对象。在访问Model属性时,Visual Studio编辑器提供了代码智能提示,如下图所示。
 
 
下面我们更改一下Details视图模板的代码,如下所示:
<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
    Dinner:
    <%= Html.Encode(Model.Title) %>
</asp:Content>
 
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        <%= Html.Encode(Model.Title) %></h2>
    <p>
        <strong>时间:</strong>
        <%= Model.EventDate.ToShortDateString() %>
        <strong>@</strong>
        <%= Model.EventDate.ToShortTimeString() %>
    </p>
    <p>
        <strong>地点:</strong>
        <%= Html.Encode(Model.Address) %>,
        <%= Html.Encode(Model.Country) %>
    </p>
    <p>
        <strong>描述:</strong>
        <%= Html.Encode(Model.Description) %>
    </p>
    <p>
        <strong>组织者:</strong>
        <%= Html.Encode(Model.HostedBy) %>
        (<%= Html.Encode(Model.ContactPhone) %>)
    </p>
    <%= Html.ActionLink("Edit Dinner", "Edit", new { id=Model.DinnerID })%>
    |
    <%= Html.ActionLink("Delete Dinner","Delete", new { id=Model.DinnerID})%>
</asp:Content>
 
再次访问/Dinners/Details/2 地址,这次呈现页面如下:
  
 
今天就到这里了,明天继续翻译ASP.NET MVC eBook – 开发NerdDinner 范例程序向导。欢迎访问http://blog.EntLib.com 博客平台获取更多的MVC学习资料。
 
相关资源下载链接:
1. ASP.NET MVC 1.0 正式版发布了!!!
 
2. 免费ASP.NET MVC eBook 向导-电子书下载
 

 

发表 @ 2009年3月31日 21:07

打 印

评论

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by itbird at 2009/4/13 15:28
Gravatar
这章比较郁闷....项目为了方便,修改了母版(view--shared-site.master)中的head这个id.改为了如下:
<title>
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
</title>
虽然方便了title的显示,但是不方便每个页面head中的keywords,和description的设置.呵呵!
怎么一来,默认不少页面的<asp:Content ID="title" ContentPlaceHolderID="head" runat="server"> 得换成<asp:Content ID="title" ContentPlaceHolderID="TitleContent" runat="server">
比如views--home/account/shared下的,以及dinners下的notfount,等. 批量替换下.
最好把Content ID="xx" 这个也换下名称,有时候直接复制过来,可能通不过,bug?

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by entlibforum at 2009/4/13 16:05
Gravatar
Sorry, 没有明白你的意思?不知道哪里有问题?

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by itbird at 2009/4/13 18:45
Gravatar
修改了母版(view--shared--site.master)中ContentPlaceHolder 的head这个id.改为TitleContent,如下:
<title>
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
</title>

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by itbird at 2009/4/13 18:48
Gravatar
不好意思这个博客带尖括号的代码,回复后,估计被屏蔽了[换中括号.]
[title]
[asp:ContentPlaceHolder ID="TitleContent" runat="server" /]
[/title]

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by entlibforum at 2009/4/13 22:43
Gravatar
itbird,

首先,感谢你反馈本博客平台屏蔽HTML <title>等元素显示的bug,现在已经修复了。

关于你说的视图,在创建View视图过程中,默认View视图中<asp:Content>中ContentPlaceHolderID 都是正确命名的“TitleContent”,不需要修改呀。

<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
招待一个宴会
</asp:Content>

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by Jxw at 2009/7/23 23:28
Gravatar
行 1: <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Models.Dinners>" %>
行 2:
行 3: <asp:Content ID="Title" ContentPlaceHolderID="MainContent" runat="server">

有错误 自动生成的也错误了啊 求助啊

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by Jxw at 2009/7/23 23:28
Gravatar
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

分析器错误
说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

分析器错误消息: 未能加载类型“System.Web.Mvc.ViewPage<NerdDinner.Models.Dinners>”。

源错误:


行 1: <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Models.Dinners>" %>
行 2:
行 3: <asp:Content ID="Title" ContentPlaceHolderID="MainContent" runat="server">


源文件: /Views/dinners/Details.aspx 行: 1

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by Jxw at 2009/7/23 23:29
Gravatar
怎么不能识别Model Html呢? Inherits那个地方没能加载出问题 怎么解决

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by yjl49 at 2009/7/25 17:16
Gravatar
中文版的问题真多啊。我的也是------当前上下文中不存在名称“Model”的编译错误。。。

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by 黄娟 at 2009/12/15 14:31
Gravatar
楼至你好,其他的页面都显示无错误,但就是,页面里的数据显示不出来。请指教

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by 黄娟 at 2009/12/15 14:46
Gravatar
不好意思,上述问题已自行解决

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by eaglet at 2009/12/20 12:43
Gravatar
“System.Nullable<System.DateTime>”不包含“ToShortDateString”的定义

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by eaglet at 2009/12/20 12:46
Gravatar
问题是如此解决的:
<p>
<strong>When:</strong>
<%=((DateTime)Model.EventDate).ToShortDateString() %>
<strong>@</strong>
<%=((DateTime)Model.EventDate).ToShortTimeString() %>
</p>

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by Eternity at 2010/1/10 12:29
Gravatar
楼主好,我在学习本书,遇到一个问题
错误 1 非泛型 类型“System.Collections.IEnumerable”不能与类型实参一起使用 在Visual Studio 2008\Projects\NerdDinner\NerdDinner\Models\Dinner.cs
public IEnumerable<RuleViolation> GetRuleViolations()
如何解决?,谢谢

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by Eternity at 2010/1/10 12:32
Gravatar
还有,能否告知联系方式,我的QQ是 897920090 ,有写问题想请教,急,急,急。。。

# re: 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 9

Left by chester at 2010/3/3 10:05
Gravatar
楼主好,我在学习本书,遇到一个问题
错误 1 非泛型 类型“System.Collections.IEnumerable”不能与类型实参一起使用 在Visual Studio 2008\Projects\NerdDinner\NerdDinner\Models\Dinner.cs
public IEnumerable<RuleViolation> GetRuleViolations()
如何解决?,谢谢

我也碰到这个问题,
能否告知联系方式
我的QQ:395156809.
MSN:chenminghong2008@hotmail.com

您的评论:



 (不显示)


 
 
 
Please add 6 and 3 and type the answer here:
    
 

评论预览窗口:

 
«九月»
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789