如何将用户复选框检查写入数据库中的多个记录-使用MVC、C#、Razor、nHibernate

如何将用户复选框检查写入数据库中的多个记录-使用MVC、C#、Razor、nHibernate,c#,asp.net-mvc,razor,nhibernate,C#,Asp.net Mvc,Razor,Nhibernate,因此,我试图将用户选中的复选框中的值插入到我的数据库中 在我的ViewModel中: [Display(Name = "Title")] public string Title { get; set; } public IEnumerable<SelectListItem> UserTitlelist { get; set; } public IEnumerable<SelectListItem> Titles { get; set; }

因此,我试图将用户选中的复选框中的值插入到我的数据库中

在我的ViewModel中:

    [Display(Name = "Title")]
    public string Title { get; set; }
    public IEnumerable<SelectListItem> UserTitlelist { get; set; }
    public IEnumerable<SelectListItem> Titles { get; set; }
在UserManagerService中:

public static int UpdateUserTitles(UserTitle userTitle)
    {

        using (ITransaction transaction = Context.BeginTransaction())
        {
            foreach (var x in userTitle)
            {
                Context.Save(userTitle);
            }
            transaction.Commit();
        }
        return 0;
    }
public static int UpdateUserTitles(UserTitle userTitle)
    {

        using (ITransaction transaction = Context.BeginTransaction())
        {
            Context.Save(userTitle);
            transaction.Commit();
        }
        return 0;
    }

我发现答案很简单:

在控制器中:

var myList = Request.Form["Title"];
            foreach (var item in myList.Split(','))
            {
                var titleToInsert = new UserTitle
                {
                    UserId = currentUserId,
                    TitleId = Convert.ToInt32(item)
                };
                UserManagerService.UpdateUserTitles(titleToInsert);                
            }
然后在UserManagerService中:

public static int UpdateUserTitles(UserTitle userTitle)
    {

        using (ITransaction transaction = Context.BeginTransaction())
        {
            foreach (var x in userTitle)
            {
                Context.Save(userTitle);
            }
            transaction.Commit();
        }
        return 0;
    }
public static int UpdateUserTitles(UserTitle userTitle)
    {

        using (ITransaction transaction = Context.BeginTransaction())
        {
            Context.Save(userTitle);
            transaction.Commit();
        }
        return 0;
    }

这样,每个记录都会单独保存

您查看的模型不正确,并且与您正在编辑的内容没有任何关系。而
SelectListItem
是一个用于
@Html.DropDownListFor()
的类,而不是用于复选框集合

您应该查看模型

public class TitleVM
{
  public int ID { get; set; }
  public string Name { get; set; }
  public bool IsSelected { get; set; }
}

public class UserTitleVM
{
  .... // other properties
  public List<TitleVM> Titles { get; set; }
}
公共类标题
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共布尔值被选为{get;set;}
}
公共类UserTitleVM
{
..//其他属性
公共列表标题{get;set;}
}
在我看来

@model UserTitleVM
@using (Html.BeginForm())
{
  ....
  for(int i = 0; i < Model.Titles.Count; i++)
  {
    @Html.HiddenFor(m => m.Titles[i].ID)
    @Html.CheckBoxFor(m =>m.Titles[i].IsSelected)
    @Html.LabelFor(m => m.Titles[i].IsSelected, Model.Titles[i].Name)
  }
@model UserTitleVM
@使用(Html.BeginForm())
{
....
对于(int i=0;im.Titles[i].ID)
@Html.CheckBoxFor(m=>m.Titles[i].IsSelected)
@Html.LabelFor(m=>m.Titles[i].IsSelected,Model.Titles[i].Name)
}
在控制器中

public ActionResult Edit(UserTitleVM model)
{
  // Get the ID's of the selected titles
  List<int> selectedTitles = model.Titles.Where(t => t.IsSelected).Select(t => t.ID);
  ....
public ActionResult编辑(UserTitleVM模型)
{
//获取所选标题的ID
列出selectedTitles=model.Titles.Where(t=>t.IsSelected)。选择(t=>t.ID);
....

对不起,这一定是我见过的最反MVC的解决方案之一