0

私は、ASP.NET MVC3、SQL Server 2012、EF5 のバンドルを使用しています。データベースに値を保存しようとすると、Book のプロパティ IsSelected のみをデータベースの Books テーブルに保存でき、StudentName を保存できず、データをデータベースの StudentBooks テーブルに保存できません。 -多くの関係、何かアイデアはありますか?

public class CheckboxController : Controller
{
    EFDbContext context = new EFDbContext(ConfigurationManager.ConnectionStrings[1].ConnectionString);

    //
    //GET: /Checkbox/

    public ActionResult Index()
    {
        ViewModelData vmd = new ViewModelData();
        List<Book> bookList = new List<Book>();

        using (EFDbContext te = new EFDbContext(ConfigurationManager.ConnectionStrings[1].ConnectionString))
        {
            var student = te.Students.First();
            vmd.StudentName = student.StudentName;

            var data = te.Books.ToList();
            foreach (var d in data) {
                Book book = new Book();
                book.BookName = d.BookName;
                book.IsSelected = false;
                book.BookId = d.BookId;
                bookList.Add(book);
            }
        }

        vmd.Books = bookList;

        return View(vmd);
    }

    //
    //GET: /Checkbox/

    [HttpPost]
    public ActionResult Index(ViewModelData vm)
    {
        foreach (var book in vm.Books) {
            context.Books.First(x => x.BookId == book.BookId).IsSelected = book.IsSelected;
        }


        context.SaveChanges();
        return View(vm);
    }
}

public class ViewModelData
{
    public string StudentName { get; set; }
    public List<Book> Books { get; set; }
}

意見

    @model UsingEFNew.Controllers.ViewModelData

@{
    ViewBag.Title = "Example";
}

@using (Html.BeginForm("Index", "Checkbox", null, FormMethod.Post))
{
<div>Your Name:</div>
    <div>
        @Html.TextBoxFor(model => model.StudentName)
    </div>

    for (int i = 0; i < Model.Books.Count; i++) {
    @Html.CheckBoxFor(m => Model.Books[i].IsSelected)
    @Html.DisplayFor(m => Model.Books[i].BookName)
    @Html.HiddenFor(m => Model.Books[i].BookId)
    @Html.HiddenFor(m => Model.Books[i].BookName)
@:</br>
}

}

マイモデル

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 Student {
        public int StudentId { get; set; }
        public string StudentName { get; set; }

        public ICollection<Book> Books { get; set; }
        public ICollection<City> Cities { get; set; }
    }
4

1 に答える 1

0

[HttpPost]Index では、ViewDataModel から生徒の名前を取得して、それを Student エンティティにプッシュすることはありません。

[HttpPost]
public ActionResult Index(ViewModelData vm)
{
    foreach (var book in vm.Books) {
        context.Books.First(x => x.BookId == book.BookId).IsSelected = book.IsSelected;
    }        

    var student = context.Students.First();
    student.Name = vm.StudentName;//now I've actually changed the student entity and changes will be pushed to database on Save()

    context.SaveChanges();
    return View(vm);
}

ただし、それらの間の関係を実際に活用しているようには見えません。本から生徒への関係を使用するのではなく、最初の生徒をつかむだけです。ビュー モデルからエンティティへの値のマッピングを示すために、ここでも同じことを行いました。

于 2013-07-01T18:58:50.330 に答える