我试过搜索,没有发现任何解决我问题的方法 . 我在Razor视图上有一个DropDownList,它不会显示我在SelectList中标记为Selected的项目 . 以下是填充列表的控制器代码:
var statuses = new SelectList(db.OrderStatuses, "ID", "Name", order.Status.ID.ToString());
ViewBag.Statuses = statuses;
return View(vm);
这是查看代码:
<div class="display-label">
Order Status</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.StatusID, (SelectList)ViewBag.Statuses)
@Html.ValidationMessageFor(model => model.StatusID)
</div>
我遍历它,甚至在视图中它具有正确的SelectedValue但是DDL始终显示列表中的第一个项目,而不管选择的值如何 . 任何人都可以指出我做错了让DDL默认为SelectValue吗?
6 回答
SelectList
构造函数的最后一个参数(您希望能够传递所选的值id)将被忽略,因为DropDownListFor帮助程序使用您作为第一个参数传递的lambda表达式并使用特定属性的值 .所以这是丑陋的方式:
模型:
控制器:
视图:
这是正确的方法,使用真实视图模型:
模型
控制器:
视图:
为每个视图创建视图模型 . 这样做只会包含屏幕上所需的内容 . 由于我不知道您在何处使用此代码,因此我们假设您有一个Create视图来添加新订单 .
为Create视图创建一个新的视图模型:
订单状态类:
在“创建”视图中,您将拥有以下内容:
您的创建操作方法:
当您单击提交按钮时,这将保留您的选择,并重定向回创建视图以进行错误处理 .
我希望这有帮助 .
确保您的返回选择值是一个字符串,而不是在模型中声明它时的int和int .
例:
对我来说,问题是由大的css填充数字(下拉字段内的顶部和底部填充)引起的 . 基本上,该项目正在显示但不可见,因为它是向下的 . 我通过使填充数字更小来固定它 .
我留下这个,以防它帮助别人 . 我有一个非常相似的问题,没有一个答案有帮助 .
我的ViewData中有一个属性,其名称与lambda表达式的选择器相同,基本上就像你将
ViewData["StatusId"]
设置为某个东西一样 .在我更改了ViewData中匿名属性的名称后,DropDownList帮助程序按预期工作 .
虽然奇怪 .
请在下面找到示例代码 .
调节器
视图