我试着搜索,但没有找到任何解决我的问题的东西。我在剃刀视图上有一个DropDownList,它不会显示我在SelectList中标记为选中的项目。下面是填充列表的控制器代码:
var statuses = new SelectList(db.OrderStatuses, "ID", "Name", order.Status.ID.ToString());
ViewBag.Statuses = statuses;
return View(vm);
以下是View代码:
<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?
发布于 2012-04-06 21:23:05
为每个视图创建一个视图模型。通过这种方式,您将只包含屏幕上所需的内容。由于我不知道您在哪里使用此代码,我们假设您有一个Create视图来添加一个新订单。
为您的创建视图创建一个新视图模型:
public class OrderCreateViewModel
{
// Include other properties if needed, these are just for demo purposes
// This is the unique identifier of your order status,
// i.e. foreign key in your order table
public int OrderStatusId { get; set; }
// This is a list of all your order statuses populated from your order status table
public IEnumerable<OrderStatus> OrderStatuses { get; set; }
}
订单状态类:
public class OrderStatus
{
public int Id { get; set; }
public string Name { get; set; }
}
在您的Create视图中,您将拥有以下内容:
@model MyProject.ViewModels.OrderCreateViewModel
@using (Html.BeginForm())
{
<table>
<tr>
<td><b>Order Status:</b></td>
<td>
@Html.DropDownListFor(x => x.OrderStatusId,
new SelectList(Model.OrderStatuses, "Id", "Name", Model.OrderStatusId),
"-- Select --"
)
@Html.ValidationMessageFor(x => x.OrderStatusId)
</td>
</tr>
</table>
<!-- Add other HTML controls if required and your submit button -->
}
您的创建操作方法:
public ActionResult Create()
{
OrderCreateViewModel viewModel = new OrderCreateViewModel
{
// Here you do database call to populate your dropdown
OrderStatuses = orderStatusService.GetAllOrderStatuses()
};
return View(viewModel);
}
[HttpPost]
public ActionResult Create(OrderCreateViewModel viewModel)
{
// Check that viewModel is not null
if (!ModelState.IsValid)
{
viewModel.OrderStatuses = orderStatusService.GetAllOrderStatuses();
return View(viewModel);
}
// Mapping
// Insert order into database
// Return the view where you need to be
}
这将在您单击submit按钮时持久化您的选择,并被重定向回create视图以进行错误处理。
我希望这能帮到你。
发布于 2017-11-03 01:13:13
当您在模型中声明它时,请确保您的返回选择值是一个字符串而不是和int。
示例:
public class MyModel
{
public string StatusID { get; set; }
}
发布于 2018-10-06 09:58:14
对我来说,这个问题是由较大的css填充数字(下拉字段中的顶部和底部填充)引起的。基本上,该项目正在显示,但看不见,因为它是下降的。我通过使我的填充数字更小来修复它。
https://stackoverflow.com/questions/10039006
复制相似问题