[英]ASP.NET MVC form element name generation
我有一堂課,看起來像這樣:
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="">
UserListVM
發送到操作而不是SearchModel
。 我如何獲得它來生成此:
<input id="Text" name="Text" type="text" value="">
@Html.TextBoxFor(m => m.SearchModel.Text, new { id = "Text" })
利用帶有第二個object
參數(稱為htmlAttributes
)的重載TextBoxFor()
方法。 在這里,您可以指定HTML屬性以應用於當前正在使用的DOM元素(在本例中為input
元素)。
編輯 :我相信你的lambda表達式是錯誤的。 更改:
@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 />
元素的替代。
為您的SearchModel創建一個局部視圖,並使用Html.Partial對其進行調用。 然后,從該局部視圖中,執行所有EditorFor / TextBoxFor擴展
您的視圖-UserList.cshtml:
@model UserListVM
@using (Html.BeginForm())
{
@Html.Partial("Search", Model.SearchModel)
}
您的視圖-Search.cshtml:
@model SearchModel
@Html.TextAreaFor(m => m.Text)
假設View的數量超過了您顯示的數量,為什么不讓Search方法采用UserListVM模型呢? 它僅包含對用戶的空引用,因此在帖子中沒有發送額外的數據。
嘗試像這樣手動進行:
@Html.TextBox("Text", Model.SearchModel.Text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.