2013-07-01 1 views
0

Я использую пакет: ASP.NET MVC3, SQL Server 2012, EF5. Когда я пытаюсь сохранить значения в моей базе данных, я могу сохранить только базу данных Book IsSelected in Books в моей базе данных, сохраненную в StudentName и не удалось сохранить данные в моей таблице StudentBooks в базе данных, в которой содержатся StudentId и BookId, ключи для многих - Какие-то отношения, какие-то идеи?ASP.NET MVC3 создает много-ко многим

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; } 
    } 
+0

Покажите мне вашу модель книги и модель вашего ученика – Greg

+0

Готово, любые идеи? – Rakstit

+0

Здесь есть несколько проблем. Во-первых, ваша ViewModel должна использовать объект Student, а не только имя. Во-вторых, неправильный путь, который вы выполняете в коллекции по вашему мнению, неверен, поэтому привязки неверны. Отправьте мне свой проект, и я его исправлю. – Greg

ответ

0

В вашей [HttpPost] Индекс вы не взять студента имя от вас VI ewDataModel и подталкивание его в любой объект 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); 
} 

Не похоже, что вы действительно используете отношения между ними. Вы просто захватываете первого ученика, а не используете отношения от книги к ученику. Я сделал то же самое здесь, чтобы продемонстрировать отображение значения из вашей модели представления в вашу сущность.

+0

Благодарим вас за решение, но она обновляет только мою таблицу «Книги» и обновляет первую строку в таблице «Студенты» в моем db, но это не то, что мне нужно. – Rakstit

+0

Ну, вы видите только одно имя студента в форме, и вы получаете только одно имя ученика из базы данных. Вы просматриваете книги, но не через студентов. – AaronLS

+0

Лучше всего иметь выделенную страницу для учащихся и отображать ссылки «Редактировать» на страницу студента. В противном случае вы сделали бы что-то очень сложное: http://stackoverflow.com/questions/4646340/asp-net-mvc-master-detail-entry-form – AaronLS