私はasp.net MVCの初心者で、ビューモデルを使用してドロップダウンリストとチェックボックスのグループを設定しています。私は SQL Server 2012 を使用しています。ここでは、学生と書籍の間に多対多の関係があります。学生 - 都市。StudentName、1 つの都市、1 人の学生のために多くの本を集める必要があります。
次の質問があります:
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>
}