加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – ASP.NET MVC DropDownListFor从模型中选择值

发布时间:2020-12-15 23:48:49 所属栏目:asp.Net 来源:网络整理
导读:我正在使用ASP.NET MVC 3,并使用DropDownListFor HTML Helper进入“getcha”. 我在控制器上这样做: ViewBag.ShippingTypes = this.SelectListDataRepository.GetShippingTypes(); 和GetShippingTypes方法: public SelectList GetShippingTypes(){ ListShip
我正在使用ASP.NET MVC 3,并使用DropDownListFor HTML Helper进入“getcha”.

我在控制器上这样做:

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的值.

我遇到这个:http://web.archive.org/web/20090628135923/http://blog.benhartonline.com/post/2008/11/24/ASPNET-MVC-SelectList-selectedValue-Gotcha.aspx

他建议当选择列表来自ViewData时,MVC会从ViewData中查找选定的值.我不知道这是不是这样,因为博客是老旧的,他在谈论MVC 1测试版.

解决这个问题的解决方法是:

@Html.DropDownListFor(m => m.RequiredShippingTypeId,new SelectList(ViewBag.ShippingTypes as IEnumerable<SelectListItem>,"Value","Text",Model.RequiredShippingTypeId.ToString()))

我尽量不要在最后的RequiredShippingTypeId上ToString,这给了我以前相同的行为:没有选择项.

我在想这是一个数据类型问题.最终,HTML帮助器正在将字符串(在选择列表中)与Int32(来自RequiredShippingTypeId)进行比较.

但是为什么将SelectList放在ViewBag中时 – 它在将其添加到模型中时完美地工作,并在视图中执行此操作不起作用:

@Html.DropDownListFor(m => m.Product.RequiredShippingTypeId,Model.ShippingTypes)

解决方法

这不起作用的原因是由于DropDownListFor帮助器的限制:只有当这个lambda表达式是一个简单的属性访问表达式时,才能使用作为第一个参数传递的lambda表达式来推断所选值.例如,这不适用于数组索引器访问表达式,这是您的案例,因为编辑器模板.

你基本上有(不包括编辑器模板):

@Html.DropDownListFor(
    m => m.ShippingTypes[i].RequiredShippingTypeId,ViewBag.ShippingTypes as IEnumerable<SelectListItem>
)

不支持以下内容:m => m.ShippingTypes [I] .RequiredShippingTypeId.它仅适用于简单的属性访问表达式,但不具有索引的集合访问权限.

您找到的解决方法是通过在构建SelectList时明确传递所选值来解决此问题的正确方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读