DropDownListFor()没有从ViewModel中填充预选项
本文关键字:填充 选项 ViewModel DropDownListFor | 更新日期: 2023-09-27 18:15:51
在我的项目中,DropDownListFor(x => x)代码位于EditorTemplate中。它用于填充数据表,其中一个字段是下拉列表。虽然所有的渲染都没有问题,但下拉列表并不默认为我在ViewModel中设置的预选项。我没看到什么?
代码如下:
ViewModel:
public class FooDetailViewModel : ViewModelBase
{
public List<FooPermissionObject> FooPermissions { get; set; }
}
强类型模型对象:
public class FooPermissionObject
{
public string Name { get; set; }
public int Reason { get; set; }
public IEnumerable<SelectListItem> Reasons { get; set; }
public bool Selected { get; set; }
}
控制器:
var viewModel = new StockLineManagementDetailViewModel();
using (_model)
{
foreach (var company in _model.GetAllRecords<Company>())
{
var permissionModel = new FooPermissionObject
{
Name = company.Name,
Selected = true,
Reasons = _model.GetAllRecords<FooPermissionReason>()
.ToList()
.Select(x => new SelectListItem
{
Value = x.FooPermissionReasonId.ToString(),
Text = x.FooPermissionReasonDesc
}),
Reason = record.FooPermissionReasonId
};
viewModel.FooPermissions.Add(permissionModel);
}
}
The View:
<table id="myTable" class="tablesorter" style="width:98%">
<thead>
<tr>
<th>
Name
</th>
<th>
Excluded
</th>
<th>
Reason for Exclusion
</th>
</tr>
</thead>
<tbody>
@Html.EditorFor(x => x.FooPermissions)
</tbody>
</table>
EditorTemplate:
@model FooPermissionObject
<tr>
<td>
@Html.DisplayFor(x => x.Name, new { @readonly = "readonly"})
@Html.HiddenFor(x => x.Name)
</td>
<td>
@Html.CheckBoxFor(x => x.Selected)
</td>
<td>
@Html.DropDownListFor(x => x.Reason, Model.Reasons)
</td>
</tr>
有人知道为什么这不会用来自Reason集合的Reason值表示的对象填充DropDownListFor吗?
我看不到你在选择列表中设置selected = true的任何代码。您正在设置FooPermissionObject的Selected属性,但这与您的下拉列表绑定到原因集合无关。您需要这样的内容:
.Select(x => new SelectListItem
{
Value = x.FooPermissionReasonId.ToString(),
Text = x.FooPermissionReasonDesc,
Selected = (Some codition or other)
})
将某些条件或其他条件替换为应该选择哪个项目的任何标准。
编辑:一个更好的方法可能如下:
Reasons = new SelectList(_model.GetAllRecords<FooPermissionReason>(),
"FooPermissionReasonId",
"FooPermissionReasonDesc",
record.FooPermissionReasonId)
SelectList的构造函数的参数是:要绑定的集合,值字段,文本字段,选定值
已编辑另一种方法(现在是一种方法)是在需要时在投影到SelectListItem
-List时设置Selected
属性。
关于这个主题的好文章可以在那里找到:http://codeclimber.net.nz/archive/2009/08/10/how-to-create-a-dropdownlist-with-asp.net-mvc.aspx