【问题标题】:How to display bool values in a view and save the value to DB如何在视图中显示布尔值并将值保存到数据库
【发布时间】:2012-12-13 04:25:22
【问题描述】:

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

表定义:

CharacterID int 
isActive    bit 
UserId  uniqueidentifier

我有两个问题:

  1. 如何在下拉列表的编辑视图中显示现有的选定选项
  2. 我需要将值(是/否)在数据库中保存为 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>

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案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 自动绑定,并且您应该能够将其映射到您的数据库实体并存储它。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多