ASP.NET MVC3复选框下拉列表创建

本文关键字:下拉列表 创建 复选框 MVC3 NET ASP | 更新日期: 2023-09-27 18:20:39

我是asp.net MVC的新手,我/m使用视图模型弹出下拉列表和复选框组。我使用的是SQL Server 2012,那里的学生与书本之间有很多对很多的关系;学生-城市。我需要为一个学生收集StudentName、一个城市和许多书。

我还有下一个问题:
1.如何将数据库中的值获取到StudentBookCityViewModel
2.如何在[HttpPost]Create方法中将值保存到数据库中?

这是代码:

型号

public class Student {
    public int StudentId { get; set; }
    public string StudentName { get; set; }
    public ICollection<Book> Books { get; set; }
    public ICollection<City> Cities { get; set; }
}
public class Book {
    public int BookId { get; set; }
    public string BookName { get; set; }
    public bool IsSelected { get; set; }
    public ICollection<Student> Students { get; set; }
}
public class City {
    public int CityId { get; set; }
    public string CityName { get; set; }
    public bool IsSelected { get; set; }
    public ICollection<Student> Students { get; set; }
}

查看模型

public class StudentBookCityViewModel {
    public string StudentName { get; set; }
    public IList<Book> Books { get; set; }
    public StudentBookCityViewModel()
    {
        Books = new[]
                    {
                        new Book {BookName = "Title1", IsSelected = false},
                        new Book {BookName = "Title2", IsSelected = false},
                        new Book {BookName = "Title3", IsSelected = false}
                    }.ToList();
    }
    public string City { get; set; }
    public IEnumerable<SelectListItem> CityValues
    {
        get
        {
            return new[]
                       {
                           new SelectListItem {Value = "Value1", Text = "Text1"},
                           new SelectListItem {Value = "Value2", Text = "Text2"},
                           new SelectListItem {Value = "Value3", Text = "Text3"}
                       };
        }
    }
}

上下文

public class EFDbContext : DbContext{
    public EFDbContext(string connectionString) {
        Database.Connection.ConnectionString = connectionString;
    }
    public DbSet<Book> Books { get; set; }
    public DbSet<Student> Students { get; set; }
    public DbSet<City> Cities { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<Book>()
            .HasMany(x => x.Students).WithMany(x => x.Books)
            .Map(x => x.MapLeftKey("BookId").MapRightKey("StudentId").ToTable("StudentBooks"));
        modelBuilder.Entity<City>()
            .HasMany(x => x.Students).WithMany(x => x.Cities)
            .Map(x => x.MapLeftKey("CityId").MapRightKey("StudentId").ToTable("StudentCities"));
    }
}

控制器

public ActionResult Create()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Create()
    {
        //I don't understand how I can save values to db
        context.SaveChanges();
        return RedirectToAction("Index");
    }

查看

@model UsingEFNew.ViewModels.StudentBookCityViewModel
@using (Html.BeginForm())
{
    <div id="ContactContainer">
        <div>Your Name:</div>
        <div>
            @Html.TextBoxFor(model => model.StudentName)
        </div>
        <div>Genre:</div>
        <div> 
            @Html.DropDownListFor(model => model.City, Model.CityValues)
        </div>
        <div>Books:</div>
        <div>
            @for (int i = 0; i < Model.Books.Count; i++)
            {
                <div>
                    @Html.HiddenFor(x => x.Books[i].BookId)
                    @Html.CheckBoxFor(x => x.Books[i].IsSelected)
                    @Html.LabelFor(x => x.Books[i].IsSelected, Model.Books[i].BookName)
                </div>
            }
        </div>
        <div>
            <input id="btnSubmit" type="submit" value="Submit" />
        </div>
    </div>
}

ASP.NET MVC3复选框下拉列表创建

您可以直接在控制器中从db获取值

    public ActionResult Create()
        {
                var vm = new StudentBookCityViewModel();
                using(var ctx = EFDbContext(connectionString))
                {
                var student = ctx.Students.First();
                vm.StudentName=student.Name;
    vm.Books = student.Books.ToList(); //make sure to call ToList() to load values from db
    ...
                }
                return View(vm);
            }
        [HttpPost]
    public ActionResult Create(StudentBookCityViewModel model)
    {
        //I don't understand how I can save values to db
        //here you have the model with all infomation from the form
       foreach(var book in model.Books){
        context.Books.First(b=>b.BookId == book.BookId).IsSelected = book.IsSelected;
}
        context.SaveChanges();
        return RedirectToAction("Index");
    }