我有一个具有位值(真/假)的表
表定义:
CharacterID int
isActive bit
UserId uniqueidentifier
我有两个问题:
- 如何在下拉菜单中的编辑视图中显示现有选定选项
- 我需要在数据库中将值(yes/No)保存为true和false
以下是我迄今为止所尝试的:
<div class="editor-label">
@Html.LabelFor(model => model.IsActive)
</div>
<div class="editor-field">
@Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model.IsActive }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model.IsActive }})
</div>
假设该模型。IsActive声明为bool
:
对用户来说,使用复选框不是更直观,需要更少的点击吗?在这种情况下,您可以使用:
@Html.EditorFor(model => model.IsActive)
如果你真的想要下拉列表,那么这个SO可能会提供一个有效的实现:https://stackoverflow.com/a/4036922/1373170
应用于您的上下文,我相信它将是:
@Html.DropDownListFor(model => model.IsActive, new SelectList(new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "True" }, new SelectListItem() { Text = "No", Value = "False"}}, model.IsActive.ToString())
现在,为了将其保存到数据库中,我必须知道您是否使用EF、L2S等。但我想你的控制器中已经设置了一个动作来保存。在这种情况下,它可能已经接收到您的模型实例作为参数。使用DropDownListFor而不是DropDownList,您的模型应该由MVC的默认ModelBinder
自动绑定,并且您应该能够将其映射到数据库实体并存储它。
要实现这一点,您需要为下拉列表和视图模型属性设置几件事。
1) 您的视图模型:
public class MyModel
{
public MyModel()
{
BoolSelectList = new List<SelectListItem>();
}
public int CharacterID { get; set; }
public bool isActive { get; set; }
public Guid UserId { get; set; }
public IList<SelectListItem> BoolSelectList { get; set; }
}
2) 在控制器中,您需要将值分配给布尔值并列出
public MyModel viewmodel = new MyModel();
// Set other properties of viewmodel
// ....
// Set Drop-down List values
viewModel.BoolSelectList = new SelectList(new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "True" }, new SelectListItem() { Text = "No", Value = "False"}};
3) 在您看来:
@Html.LabelFor(model => model.isActive, "Is Active ")
@Html.DropDownListFor(model => model.isActive, Model.BoolSelectList, model.IsActive.ToString())
在Post操作中,IsActive的值应为True/False,具体取决于您的选择。