2011-01-11 12 views
0

モデルバインディングは私のために機能しません - 私はいつもNULLをコントローラに渡します!どんな考え?ここASP.NET MVC Razorエンジンのモデルバインドに失敗しました

ロブ

は私のアクション署名である:

@model WebOne.Models.StatusIndexModel

StatusIndexModel:ここ

public ActionResult SearchForUser(SearchForUserModel m) 

私のかみそりヘッダモデル宣言でありますSearchForUserModelを含む複合モデルです。ここで

public class SearchForUserModel 
{ 
    [Required(ErrorMessage = "Search information required")] 
    [DisplayName("Contact Search")] 
    public string Search { get; set; } 
} 

は私のカミソリです:

<form action="/Status/SearchForUser" method="post">   
    <div> 
     <div class="editor-field"> 
      <input data-val="true" data-val-required="Search information required" id="searchForUserModel_Search" name="searchForUserModel.Search" type="text" value="" /> 
      <input type="submit" class="formbutton_small" value="Find" /> 
      <br /> 
      <span class="field-validation-valid" data-valmsg-for="searchForUserModel.Search" data-valmsg-replace="true"></span> 
     </div> 
    </div> 
</form> 

答えて

0

あなたは接頭辞を指定する必要があります:

public ActionResult SearchForUser(
    [Bind(Prefix="searchForUserModel")]SearchForUserModel m 
) 
+0

ああ - 理由ということである。ここ

@using (Html.BeginForm("SearchForUser", "Status")) { <div> <div class="editor-field"> @Html.TextBoxFor(m => m.searchForUserModel.Search) <input type="submit" class="formbutton_small" value="Find" /> <br /> @Html.ValidationMessageFor(m => m.searchForUserModel.Search) </div> </div> } 

は、生成されたHTMLです変数を作成していて、クラス定義を使用していませんか?それはplain-old-asp.net-MVCでは必要ではありませんでした...しかし、あなたは正しいと感謝します!私はあなたがとても速かったので、あなたの答えを受け入れるためにさらに8分待つ必要があります! –

+0

@Rob、あなたのビューが強くStatusIndexModel' 'に型指定されたし、生成されたフィールド名が' searchForUserModel.Search'ので、モデルバインダーはSearchForUserModel '内部' searchForUserModel'プロパティを探しているのに対し、あなたのポストのアクションは 'SearchForUserModel'を受け入れるため、それはですそれは見つからない。接頭辞を指定すると、この接頭辞の後にルートが始まるようにモデルバインダーに指示します。 –

+0

ああ、もう一度ダーリン、それを得た。これは、Razorパワードコントローラ上で複数のフォームを処理する最も適切な方法ですか、それとも良い方法がありますか? –

関連する問題