我有一个具有位值(真/假)的表
表定义:
CharacterID int
isActive bit
UserId uniqueidentifier
我有两个问题:
以下是我到目前为止的尝试:
<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>
答案 0 :(得分:1)
假设model.IsActive被声明为bool
:
对于用户而言,使用CheckBox会不会更直观,并且需要更少的点击次数? 在这种情况下,你可以使用:
@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 :(得分:0)
您需要为drop-down和viewmodel属性设置几项内容才能使其正常工作。
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)在控制器中,您需要为bool Value和List
指定值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,具体取决于你的选择。