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. Sublime Text3快捷键一览表

    选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...

  2. (转载)SQL中导入图片

    SQL中导入图片 分类: 论坛精贴 2006-05-10 12:07 398人阅读 评论(0) 收藏 举报 sqlimage服务器insertlogingo 1.建立过程CREATE PROCEDUR ...

  3. python在linux制作图形界面(snack)

    snack是一个用于在linux制作图形界面(GUI)的模块,该模块由c编写,而且redhat的系统都自带这个模块. 1.获取模块 虽然redhat系统会自带这个模块,但是直接去import snac ...

  4. Mysql,Oracle,Java数据类型对应

    Mysql Oracle Java BIGINT NUMBER(19,0) java.lang.Long BIT RAW byte[] BLOB BLOB RAW byte[] CHAR CHAR j ...

  5. 在Ubuntu Linux下怎样安装QQ

    最近好多人在吐槽Linux下上QQ简直就是煎熬,网页版的不方便,网上各种版本的QQ要么是功能不全.要么是界面丑到爆,要么是运行不稳定.那么这次为大家带来一个功能完整.运行稳定的wineQQ安装过程. ...

  6. 如何解决jenkins中shell脚本明明执行失败却不自行退出,且构建结果仍然显示success的问题??

    首先,需要明确shell命令执行结果$?为0或者非0仅能代表此执行语句是否顺利执行了,例如: 执行语句:adb connect 192.168.XX.XX 执行结果:unable to connect ...

  7. [转载]C#字符串加密和解密

    using System.Security.Cryptography; using System.IO; //默认密钥向量 private static byte[] Keys = { 0x12, 0 ...

  8. ConfigParser读取记事本、notepad++修改后的配置文件会出现:ConfigParser.MissingSectionHeaderError

    使用ConfigParser来读取配置文件,经常会发现经过记事本.notepad++修改后的配置文件读取时出现下面的问题: ConfigParser.MissingSectionHeaderError ...

  9. POJ 2983 Is the Information Reliable?(差分约束系统)

    http://poj.org/problem?id=2983 题意:N 个 defense stations,M条消息,消息有精确和模糊之分,若前边为P.则为精确消息,有两个defense stati ...

  10. HDU4521+线段树+dp

    题意:在一个序列中找出最长的某个序列.找出的序列满足题中的条件. 关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小.可以利用线段树进行统计,查询.更新的时候利用dp的思想. / ...