簡體   English   中英

ASP.NET MVC表單元素名稱生成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM