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

ASP.NET MVC 表单提交

2010-05-22 11:03 381 查看
实现新增数据
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");
}

别忘记还要在配置文件中配置路游规则!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: