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

 

Html.BeginForm的原型解释:
@using (Html.BeginForm()) {} //提交到当前页面

@using (Html.BeginForm(new {} )) {} //提交到当前页面,并可以传递参数

@using (Html.BeginForm("action","controller")) {} //提交到指定controller下的action中

@using (Html.BeginForm("action","controller",FormMethod.POST)) {} //提交到指定controller下的action中,并指定提交方式

FormMethod枚举如下:   

 // 摘要:
// 枚举窗体的 HTTP 请求类型。
public enum FormMethod
{
// 摘要:
// 指定 GET 请求。
Get = 0,
//
// 摘要:
// 指定 POST 请求。
Post = 1,
}

 

Ajax.BeginForm异步表单原型解释
@using (Ajax.BeginForm(
new AjaxOptions
{
UpdateTargetId = "UserLogOnContainer",
HttpMethod = "Post",
OnSuccess = " ",
})){} //提交到当前页面,提交方式为Post,异步更新模块ID为UserLogOnContainer @using (Ajax.BeginForm("action", "controller", null,
new AjaxOptions
{
UpdateTargetId = "UserLogOnContainer",
HttpMethod = "Post",
OnSuccess = " ",
}))
{} //提交到指定controller下的action,提交方式为Post,异步更新模块ID为UserLogOnContainer
下面看一下Ajax.BeginForm的例子,一个用户登陆的DEMO

View代码:

@model TsingDa.Ask.Models.UserLogOnModel
@{Layout = "";}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<div id="UserLogOnContainer">
@using (Ajax.BeginForm("UserLogOn", "Home", null,
new AjaxOptions
{
UpdateTargetId = "UserLogOnContainer",
HttpMethod = "Post",
OnSuccess = " ",
}))
{
@Html.ValidationSummary(true)
<div class="editor-field">
@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<input type="submit" id="logOnBtn" value="登陆" />
}
</div>

Controller层代码如下:

/// <summary>
/// 用户登陆
/// </summary>
/// <returns></returns>
public ActionResult UserLogOn()
{
return View(new UserLogOnModel("邮箱", "密码"));
}
[HttpPost]
public ActionResult UserLogOn(UserLogOnModel entity)
{
if (ModelState.IsValid)
{
VM = user_InfoManager.UserLogOn(new User_Info { Email = entity.Email, Password = entity.Password });
if (VM.IsComplete)
{
return RedirectToAction("Index", "Home");
}
else
{
VM.ToList().ForEach(i => ModelState.AddModelError("", i));
}
} return View();
}

放一下对应的model实体

/// <summary>
/// 用户登陆
/// </summary>
public class UserLogOnModel
{
public UserLogOnModel()
{
this.Email = "登陆名";
this.Password = "密码";
}
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "邮箱")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "密码")]
public string Password { get; set; }
}

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

需要注意的是,表单中的按钮在异步表单中也是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. [algothrim]URL相似度计算的思考

    http://www.spongeliu.com/399.html http://in.sdo.com/?p=865

  2. 在Eclipse中使用Propertites Editor插件来解决property文件中文显示乱码

    在一般情况下,propertites文件在eclipse中的显示中文一直显示乱码,想要解决这个问题,需要通过在eclipse中安装一个Propertites Editor插件来进行解决. 在Eclip ...

  3. 清除HTML中的特殊字符

    /// <summary>        /// 清楚HTML中的特殊字符        /// </summary>        /// <param name=&q ...

  4. HTTP请求报文与响应报文

    http://docs.telerik.com/fiddler/KnowledgeBase/HTTP HTTP请求报文与响应报文 HTTP http://www.w3.org/Protocols/rf ...

  5. 仪表盘 hostmap 新玩法让运维工作越玩越 high

    Cloud Insight 第13次新品发布会现在开始,首先非常感谢大家前来看我们的新功能发布会,下面我先给大家介绍一下新功能,之后有什么问题大家尽管问

  6. 【C++基础】sizeof 与 strlen的区别

    要理解两者的区别,就要分别理解他们的本质 strlen(char *) 计算字符串的长度,内部实现是用一个循环计算字符串的长度,直到‘\0’为止 1.srtlen 是一个函数,参数只能为char 或者 ...

  7. Browser detect

    A useful but often overrated JavaScript function is the browser detect. Sometimes you want to give s ...

  8. ios学习笔记block回调的应用(一个简单的例子)

    一.什么是Blocks      Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二. ...

  9. hdu 4579 Random Walk 概率DP

    思路:由于m非常小,只有5.所以用dp[i]表示从位置i出发到达n的期望步数. 那么dp[n] = 0 dp[i] = sigma(dp[i + j] * p (i , i + j)) + 1 .   ...

  10. Oracle日期函数

    Oracle日期函数用于对Oracle数据库中的日期及时间进行处理. (1)ADD_MONTHS Oracle日期函数返回一个具有与所提供日期相差月份的日期,函数中给出了未来或以前的月份数.语法如下: ...