我有一个选择列表构建器,它从Enum类型填充新的选择列表,并将枚举值选为参数。
然后将其添加到DropDownList,如下所示
@Html.DropDownList("Status",ViewBag.Status as SelectList,"Select Status..", new { @class = "form-control" })
问题是当我加载视图时没有选择,我已经检查了函数输出,我可以看到正确的值具有所选标记,如下所示。
虽然当我的视图加载时我得到了这个
我无法想象我出错的地方因为我怀疑它应该是除了我的观点之外应该是......?!?!
这是我浏览器中的输出
更新: 将DropDownList帮助器交换到
@Html.DropDownList("Status")
诀窍但是我松开了自定义样式,这是必需的...为什么不选择其他方法?
答案 0 :(得分:1)
看起来你有一些自定义下拉样式。你真正的下拉是隐藏的。请查看您的下拉列表中的HTML。
如果您发现隐藏的选择标记,则应更正自定义下拉列表的样式。
答案 1 :(得分:1)
我已经弄清楚是什么导致了这个问题,事实上我的Html.SelectList与包含我的自定义SelectList结果的ViewBag属性具有相同的名称。将ViewBag项目名称从状态更改为状态,将我的帮助程序调用更改为
@Html.DropDownList("Status",ViewBag.Statuses as SelectList,"Select Status..", new { @class = "form-control" })
诀窍!它必须是MVC约定中的某种命名冲突!我希望这可以帮助其他任何有同样问题的人,因为我在网上发现了一些类似问题但没有解决方案的问题!
答案 2 :(得分:0)
您可以提供字段名称,其值将由Razor引擎绑定到下拉列表,您需要提供要在下拉列表中绑定的属性名称。试试这个
@Html.DropDownList("Status",ViewBag.Status("AccountId","AccountName") as SelectList,"Select Status..", new { @class = "form-control" })
其中AccountId,AccountName是viewbag.Status
内的属性字段,其中AccountName将作为页面中的文本显示,而AccountId将作为值绑定。
在您的情况下,请检查viewbag.Status
并输入