2012-02-15 16 views
2

私はこのようになりますクラスを持っている:ASP.NET MVCフォーム要素名の生成

public class UserListVM 
{ 
    public SearchModel SearchModel { get; set; } 
    public PagedList<User> Users { get; set; } 
} 

public class SearchModel 
{ 
    public string Text { get; set; } 
    /* other properties */ 
} 

私は私の見解にUserListVMを送るが、アクションがSearchModel受け入れ:

public ActionResult Search(SearchModel filter) 
{ 
     UserListVM model = new UserListVM(); 

     model.Users = userService.GetUsers(filter); 
     model.SearchModel = filter; 

     return View(model); 
} 

私の見解は次のとおりです。

@model UserListVM 

<form> 
    @Html.TextBoxFor(m => Model.SearchModel.Text) 
</form> 

しかし、これは生成:

<input id="SearchModel_Text" name="SearchModel.Text" type="text" value=""> 

SearchModelの代わりにをアクションに送信します。私はそれがこれを生成するために得ることができます方法:

<input id="Text" name="Text" type="text" value=""> 
+0

をあなたはそれがSearchModelを必要とするビューにUserListVMを渡しているのはなぜ?あなたのビューはSearchModel以外のものを使用しません。 –

答えて

2
@Html.TextBoxFor(m => m.SearchModel.Text, new { id = "Text" }) 

が第二objectパラメータを取るオーバーロードさTextBoxFor()方法を活用(htmlAttributesと呼ばれます)。ここでは、現在使用しているDOM要素(この場合はinput要素)に適用するHTML属性を指定できます。

を編集してください:あなたのラムダ式が間違っていると思います。変更:

@Html.TextBoxFor(m => Model.SearchModel.Text) 

@Html.TextBoxFor(m => m.SearchModel.Text) 
// htmlAttributes omitted to show the issue 

編集編集:それも指定 name属性で、それはフォームが必要に POSTのために必要とされているものに応じてレンダリングされることが判明フィールド。

編集編集編集FormExtensions.BeginForm()と明示的にしてください:

@using (Html.BeginForm("Search", "YourController", FormMethod.Post, null)) 
{ 
    @Html.TextBoxFor(m => m.SearchModel.Text) 
} 

はあなたの<form />要素のsubstiteとしてこれを使用してください。

+0

'LabelFor'では、Idに文字列としてIdを渡す必要がありますか? –

+0

@ Lolcoder質問を正しく理解していれば、はい。 'object'(' htmlAttributes')をHTML要素属性の値を直接設定する方法と考えてください。 –

+0

これを試してみると、idだけが変更されました。何とか名前が変更されませんでした。 –

2

SearchModelの部分ビューを作成し、Html.Partialを使用して呼び出します。

@model UserListVM 

@using (Html.BeginForm()) 
{ 
    @Html.Partial("Search", Model.SearchModel) 
} 

あなたのビューを - Search.cshtml:

@model SearchModel 

@Html.TextAreaFor(m => m.Text) 
0

がAssumming UserList.cshtml - 次に、その部分図の中から、

あなたのビューをEditorFor/TextBoxFor拡張機能のすべてを行いますあなたが示した以上のビューです。SearchメソッドにUserListVMモデルを使用させるだけではいかがですか?これは、ユーザーへのヌル参照を含むだけなので、ポストに送信される余分なデータはありません。

0

このように、手動でそれをやって試してみてください。

@Html.TextBox("Text", Model.SearchModel.Text) 
関連する問題