如何在视图中显示bool值并将值保存到DB

时间:2012-07-07 01:35:44

标签: asp.net-mvc-3

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

表定义:

CharacterID int 
isActive    bit 
UserId  uniqueidentifier

我有两个问题:

  1. 如何在下拉列表中的编辑视图中显示现有的选定选项
  2. 我需要在数据库中将值(是/否)保存为true和false。
  3. 以下是我到目前为止的尝试:

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

2 个答案:

答案 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,具体取决于你的选择。