2012-02-20 25 views
0

MVCコントローラにモデルと文字列を渡す(または渡す)JSがあります。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にオブジェクトに解決されていません。投稿後のパラメータはOKです。

+0

あなたはフィドラーまたは火かき棒で見ることができる投稿された値を投稿できますか?またMyTemplateクラスを投稿してください – Rafay

+0

あなたの問題はおそらくあなたが投稿しているデータにあります。 '$(" form ")。serialize()'はフォームをポストデータ( 'foo = bar&bar = baz')にシリアル化し、オブジェクトを' data'として渡すので、jQueryはこれを再びシリアル化します。つまり、 'model = foo%3Dbar%26bar%3Dbaz&stepList = ...'のようなものを投稿します。サーバーはどのフォーマットでデータを期待していますか?私は、 'serialize'を' serializeArray'に変更することがそのトリックを行うかもしれないと推測しています。 –

+0

はここ応答のサンプルです:モデル\t ReportId = c86b8427-e249-4384-bc47-5300b2f9e346&ユーザーID = ee733263-8fe3-41a9-b511-7e501e0bf2df&たCompanyId = 10c5caf6-b50f-4b31-8842-4a257dde9275&REPORTNAME =テスト+今&TimePeriodType =昨日 stepList \t ReportName、ReportList、ReportTypes – Matt

答えて

0

私はどこかから入手したJSONモデルバインダーを持っていますが、その場所は私を逃げ出しましたが、これを見てください。

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

+0

あなたがそれを働かせるのを助けたいなら、私は喜んで助けてくれるでしょう、私はそれが私のアプリで持っているのがいいことを見つける。コードの統合。しかし、この方法が嫌ならば、私はもう詳細を投稿するのをやめます。 – Etch

関連する問題