ASP.NET MVC Framework体验(3):表单提交
点击次数:16 次 发布日期:2008-11-26 10:33:32 作者:源代码网
|
源代码网推荐 概述 源代码网推荐 在前面的两篇文章总,我们分别做了一个简单的ASP.NET MVC的例子和进行数据的绑定,在本文中,将通过ASP.NET MVC Framework实现表单的提交,你可以看到,在这里有多种方法来获取表单数据,可以自动映射、通过Request对象获取等。 源代码网推荐 源代码网推荐 实现新增数据 源代码网推荐 1.这里我们还采用上一篇做过的Blog示例(在后面的文章中,我将一直使用该示例),在这之前,先修改一下上次示例中的BlogRepository,为其增加一个Add方法: 源代码网推荐 源代码网推荐 public void Add(Post post) 源代码网推荐 { 源代码网推荐 BlogDataContext db = new BlogDataContext(); 源代码网推荐 源代码网推荐 db.Posts.InsertOnSubmit(post); 源代码网推荐 db.SubmitChanges(); 源代码网推荐 } 源代码网推荐 2.在Index视图中添加一个可以转向新建Post页面的链接,使用ActionLink()方法: 源代码网推荐 源代码网推荐 <h2>ASP.NET MVC Framework Sample</h2> 源代码网推荐 <hr /> 源代码网推荐 <%=Html.ActionLink("Home", new { action="Index"})%> | 源代码网推荐 <%=Html.ActionLink("New Post", new { action="New"})%> 源代码网推荐 源代码网推荐 <div> 源代码网推荐 <%foreach (Post post in ViewData) 源代码网推荐 { %> 源代码网推荐 <div class="postitem"> 源代码网推荐 <strong>Title</strong>:<%=Html.Encode(post.Title) %></br> 源代码网推荐 <strong>Author</strong>:<%=Html.Encode(post.Author) %></br> 源代码网推荐 <strong>PubDate</strong>:<%=Html.Encode(post.PubDate.ToShortDateString()) %></br> 源代码网推荐 <strong>Content</strong>:<%=Html.Encode(post.Description) %></br> 源代码网推荐 </div><br /> 源代码网推荐 <% } %> 源代码网推荐 </div> 源代码网推荐 在上面的代码中,第四行我们添加了New Post超链接,并指定该链接的action为New,这里我们也可以通过action名称来指定: 源代码网推荐 源代码网推荐 <h2>ASP.NET MVC Framework Sample</h2> 源代码网推荐 <hr /> 源代码网推荐 <%=Html.ActionLink("Home", "Index")%> | 源代码网推荐 <%=Html.ActionLink("New Post", "New")%> 源代码网推荐 源代码网推荐 <div> 源代码网推荐 <%foreach (Post post in ViewData) 源代码网推荐 { %> 源代码网推荐 <div class="postitem"> 源代码网推荐 <strong>Title</strong>:<%=Html.Encode(post.Title) %></br> 源代码网推荐 <strong>Author</strong>:<%=Html.Encode(post.Author) %></br> 源代码网推荐 <strong>PubDate</strong>:<%=Html.Encode(post.PubDate.ToShortDateString()) %></br> 源代码网推荐 <strong>Content</strong>:<%=Html.Encode(post.Description) %></br> 源代码网推荐 </div><br /> 源代码网推荐 <% } %> 源代码网推荐 </div> 源代码网推荐 3.编写控制器中的New action代码,这里代码非常简单,因为我们只需要转向新建Post视图就可以了,并不需要其他的操作: 源代码网推荐 源代码网推荐 [ControllerAction] 源代码网推荐 public void New() 源代码网推荐 { 源代码网推荐 //转向新页面 源代码网推荐 RenderView("New"); 源代码网推荐 } 源代码网推荐 4.编写New视图,在这里我们将提供一些表单,供用户输入数据,编写HTML代码如下: 源代码网推荐 源代码网推荐 <h2>New Post</h2> 源代码网推荐 <hr /> 源代码网推荐 <div class="postitem"> 源代码网推荐 Title:<input id="title" name="title" type="text" /><br /><br /> 源代码网推荐 Author:<input id="author" name="author" type="text" /><br /><br /> 源代码网推荐 Content:<textarea id="description" name="description" cols="40" rows="5"></textarea><br /><br /> 源代码网推荐 <input type="submit" value="Save" /> 源代码网推荐 </div> 源代码网推荐 接下来添加一个HTML的form元素,并指定它的action为我们要增加新的Post的action,这里假定为Add,并且指定method为Post,最终我们完成的代码应该看起来如下所示: 源代码网推荐 <h2>New Post</h2> 源代码网推荐 <hr /> 源代码网推荐 <div class="postitem"> 源代码网推荐 <form action="Add" method="post"> 源代码网推荐 Title:<input id="title" name="title" type="text" /><br /><br /> 源代码网推荐 Author:<input id="author" name="author" type="text" /><br /><br /> 源代码网推荐 Content:<textarea id="description" name="description" cols="40" rows="5"></textarea><br /><br /> 源代码网推荐 <input type="submit" value="Save" /> 源代码网推荐 </form> 源代码网推荐 </div> 源代码网推荐 获取表单数据 源代码网推荐 完成了上面的步骤之后,就可以编写控制器中Add action的代码,在这里需要获取表单的数据,并将其写入到数据库,ASP.NET MVC Framework中提供了多种方法获取表单数据。 源代码网推荐 源代码网推荐 1.自动映射 源代码网推荐 源代码网推荐 使用这种方法,我们只需要把方法的参数定义表单的名称,ASP.NET MVC Framework将会自动帮助我们进行映射,直接把表单的数据赋值给form的Action所对应的方法参数上,如下代码所示: 源代码网推荐 源代码网推荐 [ControllerAction] 源代码网推荐 public void Add(string title, string author, string description) 源代码网推荐 { 源代码网推荐 Post post = new Post(); 源代码网推荐 post.Title = title; 源代码网推荐 post.Author = author; 源代码网推荐 post.Description = description; 源代码网推荐 post.PubDate = DateTime.Now; 源代码网推荐 源代码网推荐 BlogRepository repository = new BlogRepository(); 源代码网推荐 repository.Add(post); 源代码网推荐 源代码网推荐 RedirectToAction("Index"); 源代码网推荐 } 源代码网推荐 2.第一种方法在使用时,如果界面上表单过多,会使方法的参数变大,这样好像就变成了重构中所说的“脏代码”,为了解决这个问题,我们还可以使用窗体变量来获取表单的值,使其代码看起来如下所示: 源代码网推荐 源代码网推荐 [ControllerAction] 源代码网推荐 public void Add() 源代码网推荐 { 源代码网推荐 Post post = new Post(); 源代码网推荐 post.Title = Request.Form["title"]; 源代码网推荐 post.Author = Request.Form["author"]; 源代码网推荐 post.Description = Request.Form["description"]; 源代码网推荐 post.PubDate = DateTime.Now; 源代码网推荐 源代码网推荐 BlogRepository repository = new BlogRepository(); 源代码网推荐 repository.Add(post); 源代码网推荐 源代码网推荐 RedirectToAction("Index"); 源代码网推荐 } 源代码网推荐 上面这两种方法都是获取表单的值,并将其保存到数据库中,转向Index action进行处理。 源代码网推荐 源代码网推荐 3. 在MVCToolkit中还提供了一些扩展的方法,可以用来获取表单的值,后面的文章再说。 源代码网推荐 源代码网推荐 配置路径选择 源代码网推荐 这一步什么时候都不能忘,这次我们修改一下,变为controller/action的形式,代码如下: 源代码网推荐 源代码网推荐 void Application_Start(object sender, EventArgs e) 源代码网推荐 { 源代码网推荐 // Code that runs on application startup 源代码网推荐 RouteTable.Routes.Add( 源代码网推荐 new Route 源代码网推荐 { 源代码网推荐 Url = "[controller]/[action]", 源代码网推荐 Defaults = new { action = "Index" }, 源代码网推荐 RouteHandler = typeof(MvcRouteHandler) 源代码网推荐 }); 源代码网推荐 } 源代码网推荐 完成数据增加 源代码网推荐 上面的示例运行后如下所示,首先是Index视图中有一个New Post链接: 源代码网推荐 源代码网推荐 点击New Post后: 源代码网推荐 源代码网推荐 提交之后,增加一条新的Post,并转向Index视图: 源代码网推荐 源代码网推荐 结束语 源代码网推荐 关于在ASP.NET MVC Framework中实现表单的提交简单示例到这里就结束,相信通过前面三篇简单的文章,大家对ASP.NET MVC Framework已经有了一个大概的认识,后面我会写一些深入一点的文章以及MVCToolkti提供的一些HTML Helper方法:) 源代码网推荐 源代码网推荐 示例代码下载:/Files/Terrylee/MVCDemo03.rar 作者:TerryLee 出处:http://terrylee.cnblogs.com 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
