在ASP.NET 4.8的 Razor中为下拉列表设置值
通过Razor将数据绑定到视图时,只有下拉列表不起作用。
我几乎可以获取视图中所有字段的值,除了下拉列表没有随所选值更新。在调试时,我可以确认模型中所有字段的值都存在(包括将用于下拉的那个字段)。
模型:
public class MainViewModel
{
public string Prop1 { get; set; }
public ComboList<Code> CodesToSelect { get; set; }
public List<DetailMainViewModel> Details { get; set; }
public MainViewModel()
{
FillCombo();
}
private void FillCombo()
{
CodesToSelect = Helpers.CreateComboCodesToSelect();
}
}
public class DetailMainViewModel
{
public string DetailProp1 { get; set; }
public int DetailProp2 { get; set; }
public string DetailProp3 { get; set; }
public Code? SelectedCode { get; set; }
public DateTime? DetailDate { get; set; }
}
视图:
@model MainViewModel
<div class="col-sm-12">
<div class="col-sm-12">
<h5>Title</h5>
</div>
<div>
@for (int i = 0; i < Model.Details.Count; i++)
{
<div class="row">
<div class="col-sm-1">
@Html.LabelFor(d => d.Details[i].DetailProp2, new { @class = "control-label" })
@Html.TextBoxFor(d => d.Details[i].DetailProp2, new { @class = "form-control", @readonly = "readonly" })
</div>
<div class="col-sm-2">
@Html.LabelFor(d => d.Details[i].DetailProp3, new { @class = "control-label" })
@Html.TextBoxFor(d => d.Details[i].DetailProp3, new { @class = "form-control", @readonly = "readonly" })
</div>
<div class="col-sm-3">
@Html.LabelFor(d => d.Details[i].SelectedCode, new { @class = "control-label" })
@Html.DropDownListFor(d => d.Details[i].SelectedCode, Model.CodesToSelect.ToSelectList(), new { @class = "form-control", @readonly = "readonly" })
</div>
<div class="col-sm-2">
@Html.LabelFor(d => d.Details[i].DetailDate, new { @class = "control-label" })
@Html.TextBoxFor(d => d.Details[i].DetailDate, new { @class = "form-control", @readonly = "readonly" })
</div>
</div>
}
</div>
</div>
正如前面所说,DetailViewModel的几乎所有字段(DetailProp2、DetailProp3 和 DetailData)都已被填充,并在屏幕上正确显示。但 SelectedCode 似乎被忽略,下拉列表总是显示列表中的第一项。还有什么需要做的,以便下拉框能根据 "d.Details[i].SelectedCode" 更新?我在这里还可能遗漏了什么?
这是我在这里的第一篇帖子,请给我任何改进的提示。
解决方案
改用一个SelectList作为替代
public SelectList DetailsDropDown { get; set; }
public MainViewModel()
{
DetailsDropDown = new SelectList((from s in XXX
select new {ID = x.Id, Des = x.Des})
"Id","Des");
}
在你的HTML页面中按如下操作
@Html.DropDownListFor(d => d.Details[i].SelectedCode, Model.DetailsDropDown, new { @class = "form-control", @readonly = "readonly", @Value = d.Details[i].SelectedCode })
关键在于这里。把该值添加进去。这对.NET Core有效。如果你使用的是MVC5,还有另一种方法。
@Value = d.Details[i].SelectedCode
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。