MVC-下拉值不绑定 table 中的所有行
MVC- drop down values not binding for all the rows in a table
型号:
public class EdituserModel : IEnumerable<EdituserModel>
{
public int UserID { get; set; }
public string Status { get; set; }
public IEnumerator<EdituserModel> GetEnumerator()
{
return ((IEnumerable<EdituserModel>)editUser).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<EdituserModel>)editUser).GetEnumerator();
}
}
观点:
<table id="tbltbl_usertable" class="tableasd" cellpadding="0" cellspacing="0">
<tr>
<th style="width:115px;text-align: center; ">User Id</th>
<th style="width:100px;text-align: center;">Status</th>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
@foreach (var user in Model)
{
<tr>
<td class="UserID" style="text-align: center; ">
<span style="text-align: center;">@user.UserID</span>
</td>
<td class="Status" style="text-align: center;">
<select id="SelectedStatusId" name="SelectedStatusId" value="@user.Status" >
<option value="A" selected="selected">Admin</option>
<option value="U">Dashboard user</option>
</select>
</td>
</tr>
}
</table>
从上面的代码中,UserID
正确显示(8 行 8 个用户)。但是第一行只显示一个下拉列表,后续行不显示。有什么我想念的吗?
您绑定到 select
的方式是错误的。您无法通过设置 select
(try it) 的 value
属性在下拉列表中设置 option
。此外,您在第一个 option
上设置 selected="selected"
。我猜这是在所有下拉菜单中选择的。
"Only one drop down is being displayed for the first row and not the subsequent rows":
我不知道这怎么可能。我已经在我的系统中对此进行了测试,但无法重现。
那么,如何将您的值绑定到下拉列表?您应该使用 MVC 的 DropdownListFor
HTML Helper。
@for (var i = 0; i < Model.Count(); i++)
{
<tr>
<td class="UserID" style="text-align: center; ">
<span style="text-align: center;">Model.editUser[i].UserID</span>
</td>
<td class="Status" style="text-align: center;">
@Html.DropDownListFor(m => Model.editUser[i].Status, new SelectList(new[] {
new { Text = "Admin", Value = "A" },
new { Text = "Dashboard user", Value = "U" },
}, "Value", "Text", Model.editUser[i].Status))
</td>
</tr>
}
每当您在 MVC () 中循环和创建表单元素时,您应该使用 for
循环而不是 foreach。这会生成适当的 name
属性,这在提交表单时很重要。
(我们通常在 ViewBag
中获取 SelectListItem
并绑定。但是当我们循环时,MVC 中的 DropDownList
助手会出现问题)
“但我不在乎为构成元素赋予适当的名称
或 DROPDOWNLISTFOR 或任何这些东西。我只想绑定我的下拉菜单好吗?":
然后:
@for (var i = 0; i < Model.Count(); i++)
{
<tr>
<td class="UserID" style="text-align: center; ">
<span style="text-align: center;">@Model.editUser[i].UserID</span>
</td>
<td class="Status" style="text-align: center;">
<select id="SelectedStatusId" name="SelectedStatusId">
<option value="A" @(Model.editUser[i].Status == "A" ? "selected" : "" )>Admin</option>
<option value="U" @(Model.editUser[i].Status =="U" ? "selected" : "" )>Dashboard user</option>
</select>
</td>
</tr>
}
更新:我现在看到了你关于 Enumerator
的更新。看,这就是为什么我问你 post 所有相关代码。您说您的页面模型是 IEnumerable<EdituserModel>
。我的回答仍然有效。将所有 Model[i]
替换为 Model.editUser[i]
(否则您也将实现 IList
)
型号:
public class EdituserModel : IEnumerable<EdituserModel>
{
public int UserID { get; set; }
public string Status { get; set; }
public IEnumerator<EdituserModel> GetEnumerator()
{
return ((IEnumerable<EdituserModel>)editUser).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<EdituserModel>)editUser).GetEnumerator();
}
}
观点:
<table id="tbltbl_usertable" class="tableasd" cellpadding="0" cellspacing="0">
<tr>
<th style="width:115px;text-align: center; ">User Id</th>
<th style="width:100px;text-align: center;">Status</th>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
@foreach (var user in Model)
{
<tr>
<td class="UserID" style="text-align: center; ">
<span style="text-align: center;">@user.UserID</span>
</td>
<td class="Status" style="text-align: center;">
<select id="SelectedStatusId" name="SelectedStatusId" value="@user.Status" >
<option value="A" selected="selected">Admin</option>
<option value="U">Dashboard user</option>
</select>
</td>
</tr>
}
</table>
从上面的代码中,UserID
正确显示(8 行 8 个用户)。但是第一行只显示一个下拉列表,后续行不显示。有什么我想念的吗?
您绑定到 select
的方式是错误的。您无法通过设置 select
(try it) 的 value
属性在下拉列表中设置 option
。此外,您在第一个 option
上设置 selected="selected"
。我猜这是在所有下拉菜单中选择的。
"Only one drop down is being displayed for the first row and not the subsequent rows":
我不知道这怎么可能。我已经在我的系统中对此进行了测试,但无法重现。
那么,如何将您的值绑定到下拉列表?您应该使用 MVC 的 DropdownListFor
HTML Helper。
@for (var i = 0; i < Model.Count(); i++)
{
<tr>
<td class="UserID" style="text-align: center; ">
<span style="text-align: center;">Model.editUser[i].UserID</span>
</td>
<td class="Status" style="text-align: center;">
@Html.DropDownListFor(m => Model.editUser[i].Status, new SelectList(new[] {
new { Text = "Admin", Value = "A" },
new { Text = "Dashboard user", Value = "U" },
}, "Value", "Text", Model.editUser[i].Status))
</td>
</tr>
}
每当您在 MVC (for
循环而不是 foreach。这会生成适当的 name
属性,这在提交表单时很重要。
(我们通常在 ViewBag
中获取 SelectListItem
并绑定。但是当我们循环时,MVC 中的 DropDownList
助手会出现问题)
“但我不在乎为构成元素赋予适当的名称 或 DROPDOWNLISTFOR 或任何这些东西。我只想绑定我的下拉菜单好吗?":
然后:
@for (var i = 0; i < Model.Count(); i++)
{
<tr>
<td class="UserID" style="text-align: center; ">
<span style="text-align: center;">@Model.editUser[i].UserID</span>
</td>
<td class="Status" style="text-align: center;">
<select id="SelectedStatusId" name="SelectedStatusId">
<option value="A" @(Model.editUser[i].Status == "A" ? "selected" : "" )>Admin</option>
<option value="U" @(Model.editUser[i].Status =="U" ? "selected" : "" )>Dashboard user</option>
</select>
</td>
</tr>
}
更新:我现在看到了你关于 Enumerator
的更新。看,这就是为什么我问你 post 所有相关代码。您说您的页面模型是 IEnumerable<EdituserModel>
。我的回答仍然有效。将所有 Model[i]
替换为 Model.editUser[i]
(否则您也将实现 IList
)