如何使用asp.net mvc4为DropDownListFor设置动态默认值

时间:2017-05-13 20:23:47

标签: asp.net-mvc asp.net-mvc-4 c#-4.0 razor

动态地我应该加载下拉列表并显示所选的值。但是下拉列表已成功加载但未选择默认值。

@ gt.PlantId - 整数, PlantId -integer

        @foreach (var gt in Model.RoleList)
        {
            <tr>
                <td>@Html.DropDownListFor(Model => Model.Plants,new SelectList(Model.Plants,"PlantId","PlantName", @gt.PlantId))</td>
                <td>@gt.PlantId</td>
                <td>@gt.RoleId</td>
                @using (Ajax.BeginForm("deletedet", new AjaxOptions() { UpdateTargetId = "Edit-User", AllowCache = true, InsertionMode = InsertionMode.ReplaceWith }))
                {
                    @Html.Hidden("userId", @gt.UserId)

                <td><p data-placement="top" data-toggle="tooltip" title="Delete"><button class="btn btn-danger btn-xs" data-title="Delete" data-toggle="modal" data-target="#myTable"><span class="glyphicon glyphicon-trash"></span></button></p></td>
                }
            </tr>

        }

1 个答案:

答案 0 :(得分:1)

如果foreach循环@Html.DropDownListFor ,@Html.HidenFor, @Html.TextBoxFor或任何其他输入元素永远不起作用,  因为在剃刀input/select/textarea中创建了一个独特的html name/id属性。但是使用foreach它无法做到这一点。  所以使用for循环或EditorTemplates而不是foreach。

其他方面,你可以生成HTML,但你不能在你的行动中发送项目清单。

示例:

<强>型号:

public class UserEditorViewModel
    {
       public string UserId { get; set; }
        public string RoleId { get; set; }
        public string UserName { get; set; }
        public IEnumerable<Roles> Roles { get; set; }
    }

EditorTemplates需要存在于Views/Shared/EditorTemplatesViews/ControllerName/EditorTemplates中,并且视图名称(默认情况下)应该是您要将其用作object(Or Name of the Model)的名称模板。

<强> Editortemplates:

  

查看/共享/ EditorTemplates / UserEditorViewModel.cshtml

@model UserEditorViewModel

<div class="form-group">
    @Html.DisplayNameFor(m => m.UserId)
    @Html.EditorFor(m => m.UserId)
</div>
<div class="form-group">
    @Html.DisplayNameFor(m => m.UserName)
    @Html.EditorFor(m => m.UserName)
</div>
<div class="form-group">
    @Html.DisplayNameFor(m => m.RoleId)
    @Html.DropDownListFor(m => m.RoleId, new SelectList(Model.Roles,"RoleId","RoleName",Model.RoleId))
</div>

查看:

@model UserEditorViewModel

@using (Html.BeginForm("--Your Action--", "--Your Controller--"))//Or use Ajax.BeginForm if you need
{
    @Html.EditorForModel()
    <input type="submit" value="Save" />
}