动态地我应该加载下拉列表并显示所选的值。但是下拉列表已成功加载但未选择默认值。
@ 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>
}
答案 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/EditorTemplates
或Views/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" />
}