【问题标题】:How to save listbox value into database in MVC4 and EF?如何将列表框值保存到 MVC4 和 EF 中的数据库中?
【发布时间】:2015-03-09 15:24:18
【问题描述】:

我有一个注册表单,允许管理员为特定用户选择菜单项。

我的目标是将选定的菜单项以逗号分隔值的形式保存到数据库中。

问题是MENU 的值始终设置为 null,而与更新模型无关。

User.cs

public partial class User
{
    public User()
    {
        this.Mobilizations = new HashSet<Mobilization>();
    }  

    ...
    public string ADDRESS { get; set; }
    public string PHONE { get; set; }       
    public string MENU { get; set; }

 }

UserViewModel.cs

 public class userViewModel
{
    public User User { get; set; }       
    public SelectList MenuList { get; set; }

    [Required(ErrorMessage="Select some menu items")]
    public string[] MenuIds { get; set; }
}

Controller.cs

 [HttpPost]
    public ActionResult Create(userViewModel model)
    {           
       var menuIds = string.Join(",", model.MenuIds);
       var user = new User()
       {
           MENU=menuIds
       };           
        TryUpdateModel(model);
        if (ModelState.IsValid) //<= The value of MENU not getting updated
        {               
            _db.Entry(model.User).State = EntityState.Modified;
            _db.SaveChanges();
        }
        return RedirectToAction("Create");
    }

查看

   <div class="form-group">
        @Html.Label("Menu", new { @class = "col-sm-2 control-label " })
        <div class="col-sm-10 ">                
            @Html.ListBoxFor(model=>model.MenuIds,Model.MenuList,new {id="menuListBox", @class = "chosen-select",multiple="multiple",
            style="width:350px"})
            @Html.ValidationMessageFor(model =>model.MenuIds)
        </div>

    </div>

【问题讨论】:

  • 除非我遗漏了什么,否则你是在创建一个用户对象,然后不会将它保存在任何地方。

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4


【解决方案1】:

如果我正确理解了这个问题,您应该执行以下操作:

[HttpPost]
public ActionResult Create(userViewModel model)
{           

    TryUpdateModel(model);
    if (ModelState.IsValid) //<= The value of MENU not getting updated
    {               
        model.User.MENU = string.Join(",", model.MenuIds);
        _db.Entry(model.User).State = EntityState.Modified;
        _db.SaveChanges();
    }
    return RedirectToAction("Create");
}

假设您的菜单项正确发布,而没有看到很难判断的视图。

【讨论】:

  • @ksg View 对我来说没问题。
  • 感谢您的回复。我有一个疑问,这段代码TryUpdateModel(model) 是否必要。我将其注释掉并对其进行了测试,它的工作原理..
  • @ksg 没问题。我认为这不会更新任何内容,因为您要更新的菜单项未显示在视图模型中,如果有意义的话,它是您在用户对象中更新的单独菜单项。这就是为什么我在上面的例子中重新设置它。祝你好运。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
相关资源
最近更新 更多