我正在使用 ASP.NET MVC 3,只是使用DropDownListFor
HTML Helper 遇到了一个“问题”。
我在我的控制器中这样做:
ViewBag.ShippingTypes = this.SelectListDataRepository.GetShippingTypes();
和GetShippingTypes
方法:
public SelectList GetShippingTypes()
{
List<ShippingTypeDto> shippingTypes = this._orderService.GetShippingTypes();
return new SelectList(shippingTypes, "Id", "Name");
}
我把它放在模型中ViewBag
而不是模型中的原因(我对每个视图都有强类型模型),是因为我有一个使用 EditorTemplate 呈现的项目集合,它还需要访问 ShippingTypes 选择列表。
否则我需要遍历整个集合,然后分配一个 ShippingTypes 属性。
到现在为止还挺好。
在我看来,我这样做:
@Html.DropDownListFor(m => m.RequiredShippingTypeId, ViewBag.ShippingTypes as SelectList)
(RequiredShippingTypeId
是类型Int32
)
发生的情况是,下拉列表RequiredShippingTypeId
中未选择 的值。
他建议,MVC将从ViewData
“选择列表”从中查找所选值ViewData
。我不确定情况是否如此,因为博客文章很旧而且他在谈论 MVC 1 beta。
解决此问题的解决方法是:
@Html.DropDownListFor(m => m.RequiredShippingTypeId, new SelectList(ViewBag.ShippingTypes as IEnumerable<SelectListItem>, "Value", "Text", Model.RequiredShippingTypeId.ToString()))
最后我试着不ToString
打开RequiredShippingTypeId
,这给了我和以前一样的行为:没有选择项目。
我认为这是一个数据类型问题。最终,HTML 助手将字符串(在选择列表中)与Int32
(来自RequiredShippingTypeId
)进行比较。
ViewBag
但是,为什么将 SelectList 放入- 当它在将其添加到模型时完美工作时它不起作用,并在视图中执行此操作:
@Html.DropDownListFor(m => m.Product.RequiredShippingTypeId, Model.ShippingTypes)