将模型和其他参数从javascript发布到MVC3控制器

时间:2012-02-20 17:41:55

标签: javascript jquery asp.net-mvc-3

我有一些JS将模型和字符串传递给MVC控制器(或试图传递)。

JS代码是:

$.ajax({
    url: self.ajaxValidationUrl,
    type: "POST",
    data: { model: $("form").serialize(), stepList: thisStepList },
    async: false,
    success: function(errors) {
        console.log("Errors...");
        if (errors.length > 0) {
            anyServerError = true;
        }
        for (var i = 0; i < errors.length; i++) {
            console.log(errors[i].ErrorMessage);
            self.errorList += "<li>" + errors[i].ErrorMessage + "</li>";
        }
    }
});

控制器如下所示:

[HttpPost]
public ActionResult ValidateReport(MyTemplate model, string stepList)
{    
    var errors = model.Validate();
    return Json(errors);
}

模型参数为空,不会解析为MyTemplate对象。帖子参数正好。

1 个答案:

答案 0 :(得分:0)

我有一个JSONmodel活页夹,我从某个地方拿到了,这个地方已经逃过我,但看看这个。

 public class FromJsonAttribute : CustomModelBinderAttribute
    {
        private readonly static JavaScriptSerializer serializer = new JavaScriptSerializer();



 public override IModelBinder GetBinder()
    {
        return new JsonModelBinder();
    }

    private class JsonModelBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName];
            if (string.IsNullOrEmpty(stringified))
                return null;
            return serializer.Deserialize(stringified, bindingContext.ModelType);
        }
    }
}

这允许您在控制器中执行此操作。

 [HttpPost]
 public ActionResult GiftsCOG([FromJson] List<GiftModel> gifts, [FromJson] string guid)
 {
 }

这允许您从javascript传递JSON。