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

时间:2011-03-04 22:43:35

标签: asp.net-mvc asp.net-mvc-3 asp.net-ajax

我很抱歉,如果已经问过这个问题,但我一直在寻找,但我找到的只是相当旧的帖子(mvc1,mvc2)。 我有一个表格,我想通过Ajax提交。

This看起来会起作用,但不包括服务器端验证。

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

2)如何处理客户端和服务器端验证?我希望mvc框架提供一个内置的机制来处理这个? 有一些验证我只做服务器端。使用ValidationSummary仍然可以在这里工作吗?

我正在使用asp.net mvc3 / razor进行无故障的javascript验证。

谢谢!

编辑:(按照下面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片段:

    

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

2 个答案:

答案 0 :(得分:8)

为此,我一直在使用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属性为您生成客户端验证。

答案 1 :(得分:1)

MVC.NET 3已经开箱即用了。只需确保在web.config中启用ClientValidationEnabled。查看this