模特:
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行)。但是,第一行只显示一个下拉列表而不是后续行。我有什么遗失的吗?
答案 0 :(得分:0)
您绑定到select
的方式是错误的。您无法通过设置option
(try it)的value
属性在下拉列表中设置select
。此外,您在第一个selected="selected"
上设置了option
。我猜这是在所有下拉列表中选中的。
“第一行只显示一个下拉列表而不是后续行”:
我不知道这是怎么回事。我已在我的系统中对此进行了测试,但无法重现。
那么,如何将您的价值绑定到下拉列表?您应该使用MVC的DropdownListFor
HTML帮助程序。
@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(Why though?)中循环和创建表单元素时,都应该使用for
循环而不是foreach。这会生成适当的name
属性,这在提交表单时非常重要。
(我们通常在SelectListItem
中获取ViewBag
并绑定。但是当我们循环时,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
。看,这就是我要求你发布所有相关代码的原因。您说该页面的模型是IEnumerable<EdituserModel>
。我的asnwer仍然有用。将所有Model[i]
替换为Model.editUser[i]
(否则您也会实施IList
)