3

我有一个包含位值的表(真/假)

表定义:

CharacterID int 
isActive    bit 
UserId  uniqueidentifier

我有两个问题:

  1. 如何在下拉列表的编辑视图中显示现有的选定选项
  2. 我需要在数据库中将值(是/否)保存为真假。

这是我到目前为止所尝试的:

<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>
4

2 回答 2

2

假设 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 的 default 自动绑定ModelBinder,并且您应该能够将其映射到您的数据库实体并存储它。

于 2012-07-07T02:21:55.673 回答
0

您需要为下拉和 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,具体取决于您的选择。

于 2012-07-07T02:55:08.763 回答