在前面的两篇文章总,我们分别做了一个简单的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方法:)

ASP.NET MVC 表单提交教程相关推荐

  1. Asp.Net Mvc表单提交之List集合

    一.说明 1.Asp.Net Mvc中Action的参数可以自动接收和反序列化form表单的值, 2.对于name=value类型,只要Action参数的变量名和input的name相同就行,不区分大 ...

  2. asp.net Ajax表单提交 二种方式数据处理 asp.net

    第一种格式 var form = $("#form1"); var data = form.serializeObject(); {"Id":"0&q ...

  3. Spring MVC表单教程

    本教程将展示如何在Spring MVC中处理表单提交. 我们将定义一个控制器来处理页面加载和表单提交. 您可以在GitHub上获取代码. 先决条件: 您应该有一个运行中的Spring MVC应用程序. ...

  4. Spring MVC JSP 表单标签教程

    在本教程中,我们将通过一个示例讨论所有与Spring MVC相关的JSP表单标签. 在本教程中,我们将使用下面重要的弹簧MVC表单标签进行讨论: 表单标签 文本字段标签 选择标签 复选框 无线电盒 密 ...

  5. php 表单提交及验证 tp,ThinkPHP表单自动提交验证实例教程

    ThinkPHP表单自动提交验证实例教程 附加规则 配合验证规则使用,包括: function 使用函数验证,前面定义的验证规则是一个函数名 callback 使用方法验证,前面定义的验证规则是一个当 ...

  6. asp.net表单提交方法:GET\POST介绍

    表单form的提交有两种方式,一种是get的方法,一种是post 的方法,如果没有特殊指定,默认为post.看下面代码,理解ASP.NET Get和Post两种提交的区别: 1.< form i ...

  7. Spring MVC表单防重复提交

    转载自 Spring MVC表单防重复提交 利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retent ...

  8. 微信公众号php提交表单,PHP教程:使用YII2框架实现微信公众号中表单提交功能...

    <PHP教程:使用YII2框架实现微信公众号中表单提交功能>要点: 本文介绍了PHP教程:使用YII2框架实现微信公众号中表单提交功能,希望对您有用.如果有疑问,可以联系我们. 相关主题: ...

  9. 简单表单提交php教程,php教程之表单提交实例

    一个超简单的初学者用的php教程之表单提交实例有需要的朋友参考一下. 下面我们将创建一个复杂的表单,代码如下所示. 实例代码如下: 姓名: 密码: 年龄: 16">小于16 16-30 ...

最新文章

  1. java string 连续字符_Java中字符串中连续相同字符去重方法
  2. java怎么使用log函数_在使用couenne求解器的spyder中使用logof函数
  3. HTTP.sys 远程执行代码验证工具
  4. python中是干嘛的-你都用Python来做什么,它对你来说有什么作用?
  5. python各个解释器的用途-常用的五种Python解释器|老男孩网络Python学习课程
  6. Linux内核功能及架构
  7. 识别Java中的代码气味
  8. 信息学奥赛一本通 2068:【例2.6】鸡兔同笼
  9. dj鲜生-06-其它模块以应用方式生成并归位
  10. 易到用车:服务器遭到连续攻击 被索要巨额比特币
  11. [MATLAB]MATLAB中SIMULINK常用命令表
  12. 吾在这里给大家拜年啦!
  13. FileZilla Server源码分析--大漠落日5节
  14. 网联最终落地,如何影响第三方支付机构、银联等?
  15. 汇正财经推荐股票靠谱吗?说说自己的经历
  16. 新一年级家长快查收,小学入学必备物品超强清单!
  17. 2021年中国玉米淀粉市场供需及价格分析,购销转淡,跌势趋稳,价格仍处高位「图」
  18. WPS自定义样式功能太弱了
  19. 1994-2019:中国互联网流量争夺史
  20. 漏洞poc和漏洞利用_带HTML的PowershellHTML空白空间隐写术和二进制漏洞利用交付[PoC]

热门文章

  1. vb 6.0服务器组件选哪个,VB 6.0包括几种版本?分别是什么?
  2. mysql建立pdm模型_如何使用PowerDesigner创建物理数据模型(PDM)
  3. sharding-jdbc分库分表的 4种分片策略
  4. 十年JAVA架构经验总结:这几点尤为关键!
  5. 清华学长教你用Python 批量加水印只需一行命令!
  6. matlab 汽车 流场,matlab画流场图
  7. Docker compose多容器管理
  8. PHP验证码和Ajax验证
  9. 云计算 - OpenStack
  10. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...