asp.net mvc 3 - ajax 表单提交和验证

Posted

技术标签:

【中文标题】asp.net mvc 3 - ajax 表单提交和验证【英文标题】:asp.net mvc 3 - ajax form submit and validation 【发布时间】:2011-07-09 04:15:08 【问题描述】:

很抱歉,如果已经有人问过这个问题,但我一直在寻找一段时间,但我发现的都是相当老的帖子(mvc1,mvc2)。 我有一个表单,我想通过 Ajax 提交。

This 看起来可以,但不包括服务器端验证。

1) 我不确定我应该使用AjaxHelper.BeginForm 还是使用原始jquery 调用($.ajax)?这里推荐的方法是什么?

2) 我如何处理客户端和服务器端验证?我希望 mvc 框架提供一个内置机制来处理这个问题? 有一些验证我只在服务器端进行。使用ValidationSummary 还能在这里工作吗?

我正在使用带有不显眼的 javascript 验证的 asp.net mvc3/razor。

谢谢!

编辑:(根据下面 Bobby B 的要求)。 这是在提出问题几个月后添加的,因为用户想知道如何使用 AjaxHelper

这是我使用的 javascript 代码:

<script type="text/javascript">

function ajaxValidate() 
  return $('form').validate().form();


function getGbPostSuccess(ajaxContext)
  // .... it is not necessary to do anything here.

function showFaliure(ajaxContext)
   // handle failure

html sn-p:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions
                        
                            UpdateTargetId = "form1",
                            InsertionMode = InsertionMode.Replace,
                            OnBegin = "ajaxValidate",
                            OnSuccess = "getGbPostSuccess",
                            OnFailure = "showFaliure"
                        ))

【问题讨论】:

【参考方案1】:

为此,我已经使用malsup's jQuery form plugin 有一段时间了。老实说,我对 AjaxHelper 并不熟悉,但看起来它确实可以满足您的需求。就客户端和服务器端验证而言,只要您使用模型绑定和 System.DataAnnotations 命名空间中的属性,这一切都应该自动发生。

public class MyModel

    [Required(ErrorMessage = "Please enter your name")]
    public String Name  get; set; 

    [Required(ErrorMessage = "Please enter your email")]
    public String Email  get; set; 

    [Required(ErrorMessage = "Please enter a rating")]
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")]
    public Int32 Rating  get; set; 


[HttpPost]
public ActionResult Index(MyModel myModel)

   if(ModelState.IsValid)
   
       // good to go, put it in the DB or whatever you need to do
   
   else 
   
       return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls
   

如果您正在执行自己的自定义服务器端验证,您可以通过创建实现 ValidationAttribute 的属性来创建自己的自定义验证属性,或者通过调用 ModelState.Errors.Add()(或其他方法)添加验证错误那里,我手边没有参考资料)

对于客户端,MVC 将根据模型上的 DataAnnotations 属性为您生成客户端验证。

【讨论】:

谢谢!我现在可以工作了。我最终使用了 AjaxHelper。 您能否详细说明您是如何使用 AjaxHelper 的?我自己也面临同样的问题,我正在努力决定最好的方法是什么。谢谢! 我将添加示例代码作为对问题的编辑。这样我可以更好地格式化它;-)【参考方案2】:

MVC.NET 3 已经具备这个开箱即用的功能。只需确保在 web.config 中启用 ClientValidationEnabled。检查this

【讨论】:

我查看了链接,但它解释了如何启用客户端验证。我确实启用了客户端验证,很遗憾这不是我的问题。

以上是关于asp.net mvc 3 - ajax 表单提交和验证的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net Mvc Ajax.BeginForm提交表单

如何使用 JavaScript 而不是提交按钮发布 ASP.NET MVC Ajax 表单

ASP.NET MVC 网站开发总结——Ajax异步提交表单之检查验证码

Asp.Net MVC 5 Jquery 验证不适用于带有提交事件的 ajax 帖子,显示为有效表单

ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单

ASP.NET MVC 表单提交两次