Отправка модели и дополнительных параметров из javascript на контроллер MVC3 - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть 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>";
        }
    }
});

Контроллер выглядитthis:

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

Параметр модели пуст и не разрешается в объект MyTemplate.Параметры сообщения приходят в порядке.

1 Ответ

0 голосов
/ 20 февраля 2012

У меня есть переплет 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)
 {
 }

Это позволяет вам передавать JSON из JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...