MVC-下拉值不绑定表中的所有行

时间:2017-09-13 14:38:36

标签: asp.net-mvc asp.net-mvc-4 datatable model

模特:

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>&nbsp;</td>
        <td>&nbsp;</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行)。但是,第一行只显示一个下拉列表而不是后续行。我有什么遗失的吗?

1 个答案:

答案 0 :(得分:0)

您绑定到select的方式是错误的。您无法通过设置optiontry 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