2009-04-21 9 views
0

このBind属性は必須ではありませんが、JSON型はバインドされていないということを理解しました。私はここで何が欠けていますか?私はRC1を実行しています。ASP.NET MVC:JsonResultメソッドはBind属性を必要としますか?

編集:

が、これは動作するようになっている:

public JsonResult Index(Person person) 
{ 
    do something with person. 
} 

しかし、それは私がこれを行う場合を除き、いくつかのコントローラのアクションのために動作しません。

public JsonResult Index([Bind(Prefix="")]Person person) 
{ 

} 

を第1の目的は無効となります。

のjQueryのAjax:

$.ajax({ 
       type: "POST", 
       url: "/Index/Person", 
       data: { PersonID: personID, Name: name }, 
       dataType: "json", 
       success: function(data) {..} 

     } 
    } 
    }); 
+1

質問を詳しく説明できますか?引数の名前がhtmlページのフォーム要素の名前と一致すると、自動的にバインディングが行われます。 –

+0

Bind属性を入れない限り、バインディングはまったく起こりません。他のアクション結果は正常に動作します。編集 – zsharp

+0

を参照してください多くの詳細情報を提供する必要があります –

答えて

1

最初にいくつかの正当性チェックを行います。これらのすべてではありませんが、ほとんどのコードがありますが、バインドされているコードはありません。

アクションには[AcceptVerbs(HttpVerbs.Post)]フィルタがありますか? Person[Serializable]とマークしてみてください。あなたのPersonはどのように見えますか?それはデフォルトのコンストラクタを持っていますか?デフォルトのコンストラクタに何かエラーが発生する可能性のあるものはありますか?

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult Index(int PersonID, string Name) {} 

またはFormCollectionを取るとUpdateModel()を呼び出す:あなたは、引数としてPersonを使用していないアクションを作ってみましょうPerson

に性質上まったく同じスペルを使用していることを確認。

+0

私はこれをすべて成功させようとしない。あなたがしたように変数を打ち破ることはできますが、私がしたいことではありません。私のコードは上記のポストと同じです。 probはJSonResultでのみ使用できます。 – zsharp

+0

私はあなたが馬鹿なので、私はあなたに "健全性チェック"のアドバイスを提供します。 – zsharp

+0

男、私はそこにいました。私はあなたが少なくとも週に一度その結論に来なければ、おそらくそれを間違っていると思います:)。 – swilliams

2

バインド属性は、一般的に結合モデルには必要ありません。しかし、あなたの質問は、実際の問題が何であるかを誰かが判断するのに十分な詳細を提供していません。サーバにJSON を投稿しようとしている場合は、このいずれも機能しません。デフォルトのモデルバインダーは、ポストされたフォーム値のみをアクションメソッドの引数にバインドします。

+0

上記のjqueryを参照してください。これは、Bind属性を設定したときに機能します。これはお勧めしませんか? – zsharp

2

以下のコードは私のために働いています。

また、確認するには、少なくともRC1バージョンのMVCをお持ちですか?初期のMVCのプレビューにはBind属性が必要でしたが、一般的なケースでは[Bind]属性をunnessesaryにするためにRC1で変更されました。詳細はthis postを参照してください。

Javascriptコード:

<div id="result" /> 

コントローラーコード:HTMLでこれにより

$(function() { 
    $("#result").text("Calling Ajax..."); 
    $.ajax({ 
     type: "POST", 
     url: "/Home/Person", 
     data: { Name: "Erv Walter", PersonID: "123" }, 
     dataType: "json", 
     success: function(data) { 
      $("#result").text(data.Name); 
     } 
    }); 
}); 

[AcceptVerbs("POST")] 
public JsonResult Person(Person person) 
{ 
    person.Name = person.Name.ToUpper(); 
    return Json(person); 
} 

とPersonクラスは次のようになります。

public class Person 
{ 
    public string Name { get; set; } 
    public string PersonID { get; set; } 
} 
0

問題は、パラメータの変数名が、オブジェクトの変数と同じ名前(小文字)であることでした。

関連する問題