簡體   English   中英

在forz循環剃刀視圖中從select2發布值

[英]Post value from select2 in for loop of razor view

我有一個像這樣的列表視圖:

@model List<ABC.Models.InfoDetails>

我使用for循環來顯示表中的值,以便能夠編輯每一行並使用提交按鈕(在表的底部)將數據發布回控制器。

@using (Html.BeginForm("UpdateUsers", "User")) {
<table ...

<tbody>
    @for (var i = 0; i < Model.Count(); i++) {
 ...
}

這些值會像這樣回發:

[0].Title

[1].Title

等等

這很好,我在控制器中得到正確的值。

唯一的問題是從每行的select2下拉元素中發布所選值。

<select class="js-select2 form-control" name="user" id="select2-user">

名稱值(“user”)將發布到控制器而不是名稱[0].User

我的Javascript:

var users = [
                { id: '0', text: 'Please choose...' },
                { id: '1', text: 'Paul' }
                ];

$("[name='user']").select2({
                placeholder: "Select a user",
                data: users
            });

有沒有辦法將值放到每個用戶屬性的相應索引?

我希望你能幫助我。

始終使用HtmlHelper方法生成正確的html(包括name屬性)並綁定到您的模型。 我還建議您為控制器中的選項生成集合並將其傳遞給模型,而不是在視圖中生成它們。 理想情況下,您可以使用視圖模型執行此操作

public class InfoDetailsVM
{
    public IEnumerable<User> UserList { get; set; }
    public List<InfoDetails> Details { get; set; }
}

請注意,假設您的User類包含屬性int IDstring Name

並在GET方法中

InfoDetailsVM model = new InfoDetailsVM
{
    Details = ... // your current query for the collection of InfoDetails
};
ConfigureViewModel(model);
return View(model);

ConfigureViewModel()位置

private void ConfigureViewModel(InfoDetailsVM model)
{
    model.UserList = ... // your code to return a collection of Users
}

並在視圖中

@model InfoDetailsVM
....
@for(int i = 0; i < Model.Details.Count; i++)
{
    @Html.LabelFor(m => m.Details[i].User)
    @Html.DropDownListFor(m => m.Details[i].User, 
        new SelectList(Model.UserList, "ID", "Name", Model.Details[i].User,
        "Select a user", 
        new { @class = "js-select2 form-control" }
    )
    @Html.ValidationMessageFor(m => m.Details[i].User)
    ....
}

而劇本將是公正的

$('.js-select2').select2();

附注:

  1. 有關在循環中生成下拉列表的更多信息,請參閱MVC5 Razor html.dropdownlist以便在值為數組時選擇set
  2. 單獨的ConfigureViewModel()方法允許您在POST方法中調用它(無需復制代碼),如果ModelState無效並且您需要返回視圖,則需要執行此操作。
@Html.DropDownListFor(items => Model[i].UserID,                                
 new SelectList(@Model.Users, "id", "text", @Model.Users[i].id),            
 new                                                                          
 {                                                                       
   @class = "select2-hidden-accessible",                              
   @aria_hidden = "true"                                                     
})

嘗試使用razor語法進行渲染。 並給class = "select2-hidden-accessible"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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