2012-02-20 35 views
0

我有一些JS正在向MVC控制器傳遞(或試圖傳遞)模型和字符串。將模型和其他參數從javascript發佈到MVC3控制器

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的對象。帖子參數正常。

+0

你可以發佈你可以看到在提琴手或螢火蟲發佈的值?還發布MyTemplate類 – Rafay 2012-02-20 17:45:25

+0

您的問題可能在您發佈的數據中。 $(「form」)。serialize()'會將你的表單序列化爲後期數據('foo = bar&bar = baz'),然後jQuery將會再次序列化,因爲你將一個對象作爲'data'傳遞。所以你會發布類似'model = foo%3Dbar%26bar%3Dbaz&stepList = ...'。服務器以什麼格式預期數據?我猜想將'serialize'更改爲'serializeArray'可能會有所裨益。 – 2012-02-20 18:15:54

+0

這裏的響應的採樣:模型\t ReportId = c86b8427-e249-4384-bc47-5300b2f9e346&用戶Id = ee733263-8fe3-41a9-b511-7e501e0bf2df&CompanyId = 10c5caf6-b50f-4b31-8842-4a257dde9275&REPORTNAME =測試+現在&TimePeriodType =昨天 步驟列表\t ReportName,ReportList,ReportTypes – Matt 2012-02-21 08:56:01

回答

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。

+0

我無法得到這個工作。它不喜歡使用這種方法綁定模型。 – Matt 2012-02-22 08:52:39

+0

如果您希望得到它的幫助,我會很樂意提供幫助,我覺得在我的應用程序中有一件好事。代碼合併。但是,如果你不喜歡這種方法,我不會打擾發佈任何細節。 – Etch 2012-02-22 23:37:57

相關問題