C# 使用jquery post时管理服务器端验证

C# 使用jquery post时管理服务器端验证,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,从razor视图中,我使用jquery将js对象发送到mvc控制器。我之所以使用jQueryPost方法而不是razors表单,是因为我需要管理某些字段的动态输入。在视图中,某些字段(InputExtBox)被动态添加到视图中(从0到10),我在页面上使用js管理该解决方案 var myJsObj = ... $.ajax({ type: 'POST', traditional: true, contentType: 'app

从razor视图中,我使用jquery将js对象发送到mvc控制器。我之所以使用jQueryPost方法而不是razors表单,是因为我需要管理某些字段的动态输入。在视图中,某些字段(InputExtBox)被动态添加到视图中(从0到10),我在页面上使用js管理该解决方案

 var myJsObj = ...
 $.ajax({
           type: 'POST',
           traditional: true,
           contentType: 'application/json',
           url: '/MyController/SomeAction',
           data: JSON.stringify({ model: myJsObj}),
           success: function () {

           }
 });
在服务器端,mvc接收该模型,如果出现错误,我希望将该对象返回到视图

[HttpPost]
public ActionResult SomeAction(MyModel model)
{
   if(!ModelState.IsValid)
   {
      ModelState.AddModelError("", "Error occured!");
      return View(model);
   }     
   return RedirectToAction("Index");  
}
我可以看到里面的风景

Html.ValidationSummary

但是由于我使用jquerypost,我不知道如何接收返回视图并显示错误,就像我使用常规razor表单一样。或者,如果您知道更好的方法来管理razor视图上动态添加的输入框,请发布。请提供帮助。

这是我为动态输入显示错误所做的工作。首先,看看这篇文章,让你更好地理解。我已经修改了我的代码,以更好地满足我的需要,但您可以检查它是否适用于您的应用程序。 . 然后,我将在ajax post错误回调中使用返回结果。它在验证错误时返回代码400“错误请求”。validator变量是form validator对象

error: function (xhr, textStatus, errorThrown) {
     var statusCode = parseInt(xhr.status);
     if (statusCode == 400) {
         var data = $.parseJSON(xhr.responseText);
         var message = "";
         $.each(data, function (i, item) {
             var propertyName = "" + item.key + "";
             if ($("input[name='" + item.key + "']").length > 0) {
                 var errorObj = {};
                 errorObj[item.key] = item.error;
                 validator.showErrors(errorObj);
            }
            else {
                message += "<div>" + item.key + ": " + item.error + "</div>";
            }
        });

        if (message != "") {
            //display message
         }
    }
}
error:函数(xhr、textStatus、errorshown){
var statusCode=parseInt(xhr.status);
如果(状态代码==400){
var data=$.parseJSON(xhr.responseText);
var message=“”;
$。每个(数据、功能(i、项){
var propertyName=“”+item.key+”;
如果($(“输入[name=”+item.key+“]”))。长度>0){
var errorObj={};
errorObj[item.key]=item.error;
验证器错误(ERRORBJ);
}
否则{
消息+=“”+item.key+”:“+item.error+”;
}
});
如果(消息!=“”){
//显示消息
}
}
}

我希望这有帮助。祝你好运。

我想你有几个选择:

  • 如果您喜欢像上面所示继续使用ajaxpost,那么您需要从POST中获取响应并将其注入到当前的HTML文档中。比如说,
  • $.ajax({
    键入:“POST”,
    传统的:是的,
    contentType:'应用程序/json',
    url:“/MyController/SomeAction”,
    数据:JSON.stringify({model:myJsObj}),
    成功:功能(数据){
    //这就是MVC操作发现模型验证的情况
    //错误,因此它使用一个HTML文档进行响应
    //显示错误。
    var returnedBodyHtml=$(数据).find('body').html();
    $('body').html(returnedBodyHtml);
    }
    
    });您使用的ASP.NET MVC版本是什么?这是否意味着如果我想使用razor的表单,我需要在MVC post操作中接受10个参数?