Html.BeginForm与Ajax.BeginForm都是MVC架构中的表单元素,它们从字面上可以看到区别,即Html.BeginForm是普通的表单提交,而Ajax.BeginForm是支持异步的表单提交,这对于我们开发者来说是一个福音,我们不用再自己去用JQ代码了,直接用MVC自代的Ajax.BeginForm就可以很容易的完成一个异步的表单提交动作。

Html.BeginForm的原型解释:

 1 @using (Html.BeginForm()) {} //提交到当前页面
2
3 @using (Html.BeginForm(new {} )) {} //提交到当前页面,并可以传递参数
4
5 @using (Html.BeginForm("action","controller")) {} //提交到指定controller下的action中
6
7 @using (Html.BeginForm("action","controller",FormMethod.POST)) {} //提交到指定controller下的action中,并指定提交方式
8
9 FormMethod枚举如下:
10
11  // 摘要:
12 // 枚举窗体的 HTTP 请求类型。
13 public enum FormMethod
14 {
15 // 摘要:
16 // 指定 GET 请求。
17 Get = 0,
18 //
19 // 摘要:
20 // 指定 POST 请求。
21 Post = 1,
22 }

Ajax.BeginForm异步表单原型解释

 1 @using (Ajax.BeginForm(
2 new AjaxOptions
3 {
4 UpdateTargetId = "UserLogOnContainer",
5 HttpMethod = "Post",
6 OnSuccess = " ",
7 })){} //提交到当前页面,提交方式为Post,异步更新模块ID为UserLogOnContainer
8
9 @using (Ajax.BeginForm("action", "controller", null,
10 new AjaxOptions
11 {
12 UpdateTargetId = "UserLogOnContainer",
13 HttpMethod = "Post",
14 OnSuccess = " ",
15 }))
16 {} //提交到指定controller下的action,提交方式为Post,异步更新模块ID为UserLogOnContainer

下面看一下Ajax.BeginForm的例子,一个用户登陆的DEMO

View代码:

 1 @model TsingDa.Ask.Models.UserLogOnModel
2 @{Layout = "";}
3 <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
4 <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
5 <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
6 <div id="UserLogOnContainer">
7 @using (Ajax.BeginForm("UserLogOn", "Home", null,
8 new AjaxOptions
9 {
10 UpdateTargetId = "UserLogOnContainer",
11 HttpMethod = "Post",
12 OnSuccess = " ",
13 }))
14 {
15 @Html.ValidationSummary(true)
16 <div class="editor-field">
17 @Html.TextBoxFor(m => m.Email)
18 @Html.ValidationMessageFor(m => m.Email)
19 </div>
20 <div class="editor-field">
21 @Html.TextBoxFor(m => m.Password)
22 @Html.ValidationMessageFor(m => m.Password)
23 </div>
24 <input type="submit" id="logOnBtn" value="登陆" />
25 }
26 </div>

Controller层代码如下:

 1      /// <summary>
2 /// 用户登陆
3 /// </summary>
4 /// <returns></returns>
5 public ActionResult UserLogOn()
6 {
7 return View(new UserLogOnModel("邮箱", "密码"));
8 }
9 [HttpPost]
10 public ActionResult UserLogOn(UserLogOnModel entity)
11 {
12 if (ModelState.IsValid)
13 {
14 VM = user_InfoManager.UserLogOn(new User_Info { Email = entity.Email, Password = entity.Password });
15 if (VM.IsComplete)
16 {
17 return RedirectToAction("Index", "Home");
18 }
19 else
20 {
21 VM.ToList().ForEach(i => ModelState.AddModelError("", i));
22 }
23 }
24
25 return View();
26 }

表单提交后,页面效果如下:

需要注意的是,表单中的按钮在异步表单中也是Submit类型,如果是异步表单,引入的JS文件需要有jquery.unobtrusive-ajax.min.js,在这项目的scripts目录已经存在。

MVC3系列~Html.BeginForm与Ajax.BeginForm的更多相关文章

  1. 爱上MVC3系列~Html.BeginForm与Ajax.BeginForm

    Html.BeginForm与Ajax.BeginForm都是MVC架构中的表单元素,它们从字面上可以看到区别,即Html.BeginForm是普通的表单提交,而Ajax.BeginForm是支持异步 ...

  2. 转:MVC3系列:~Html.BeginForm与Ajax.BeginForm

    Html.BeginForm与Ajax.BeginForm都是MVC架构中的表单元素,它们从字面上可以看到区别,即Html.BeginForm是普通的表单提交,而Ajax.BeginForm是支持异步 ...

  3. Html.BeginForm() vs Ajax.BeginForm() in MVC3

    我们知道,BeginForm()方法能创建一个Form标签,因此可以结合表单级的方法,在这个页面中.我一直在考虑Html.BeginForm()方法和Ajax.BeginForm()方法在MVC3中有 ...

  4. MVC小系列(十一)【Html.BeginForm与Ajax.BeginForm】

    Html.BeginForm与Ajax.BeginForm都是mvc的表单元素,前者是普通的表单提交,而后者是支持异步的表单提交,直接用mvc自带的Ajax.BeginForm就可以很容易完成一个异步 ...

  5. Html.BeginForm())与Ajax.BeginForm()

     一.@using (Html.BeginForm())参数示例 1.指定表单提交方式和路径等 @using (Html.BeginForm("Index", "Home ...

  6. MVC Html.BeginForm 与 Ajax.BeginForm 使用总结

    最近采用一边工作一边学习的方式使用MVC5+EF6做一个Demo项目, 期间遇到不少问题, 一直处于研究状态, 没能来得及记录. 今天项目进度告一段落, 得以有空记录学习中遇到的一些问题. 由于MVC ...

  7. form表单和ajax表单提交(Html.BeginForm()、Ajax.BeginForm())的差别

    有如下几种区别: 1. Ajax在提交.请求.接收时,都是异步进行的,网页不需要刷新: Form提交则是新建一个页面,哪怕是提交给自己本身的页面,也是需要刷新的: 2. A在提交时,是在后台新建一个请 ...

  8. @using (Html.BeginForm()) @using (Ajax.BeginForm(new AjaxOptions() { })) 区别

    @using (Html.BeginForm()) 返回页面 也是页面 都是返回页面 只是 多了一个 data-ajax="true"

  9. 【转】利用Ajax.BeginForm提交文件

    Ajax.BeginForm @using (Ajax.BeginForm("YourAction", "YourController", new AjaxOp ...

随机推荐

  1. leetcode Insert Interval 区间插入

    作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Insert Interval 使用模拟 ...

  2. debian 学习记录-4 -关于linux -2

    来源:<Debian标准教程>王旭 著 Slackware.Debian.RedHat.SuSE 这4种发布版是当今大部分发布版的前去,虽然SuSE衍生自Slackware,但由于其技术变 ...

  3. codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre

    C. Lieges of Legendre 题意:给n,m表示有n个为2的倍数,m个为3的倍数:问这n+m个数不重复时的最大值 最小为多少? 数据:(0 ≤ n, m ≤ 1 000 000, n + ...

  4. HTTP - PUT 上传文件/Shell (二)

    上一篇文章 HTTP - PUT 上传文件/Shell 讲到自己搭了一个环境,去测试HTTP - PUT上传Shell.最近又遇到几个PUT上传的例子,也成功上传了几次,来分享一下思密达. 0x00 ...

  5. objective-c常用数学方法

    1. 三角函数  double sin (double);正弦  double cos (double);余弦  double tan (double);正切  2 .反三角函数  double as ...

  6. 获取iOS设备型号的方法总结

    三种常用的办法获取iOS设备的型号: 1. [UIDevice currentDevice].model (推荐): 2. uname(struct utsname *name) ,使用此函数需要#i ...

  7. Spring 数据源配置二:多数据源

    通过上一节  Spring 数据源配置一: 单一数据源  我们了解单一数据源的配置, 这里我们继续多个数据源的配置 如下(applicationContent.xml 内容) 一:  Spring   ...

  8. js正则匹配查找

    var pattern1 = /好/g; console.log(pattern1.test("你好")); 字符串查找: var pattern1 = /\w/; console ...

  9. Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片

    在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片: ? 1 2 3 openedImg = Image.open(saveToFile); print " ...

  10. CF Codeforces Round #231 (Div. 2)

    http://codeforces.com/contest/394 话说这次CF做的超级不爽,A题一开始交过了,我就没再管,B题还没看完呢,就死困死困的,后来觉得B题枚举一下估计能行,当时是觉得可以从 ...