需要在一个表单上选择多本书
楷模
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public int Price { get; set; }
public bool Selected { get; set; }
}
public class Purchase
{
public int PurchaseId { get; set; }
public string Person { get; set; }
public string Address { get; set; }
public List<Book> Books { get; set; }
}
public class DbInitializer : DropCreateDatabaseAlways<BookContext>
{
protected override void Seed(BookContext context)
{
context.Books.Add(new Book { Name = "Война и мир", Author = "Л.Н. Толстой", Price = 220 });
context.Books.Add(new Book { Name = "Отцы и дети", Author = "И. Тургенев", Price = 180 });
context.Books.Add(new Book { Name = "Чайка", Author = "А. Чехов", Price = 150 });
base.Seed(context);
}
}
控制器
public class HomeController : Controller
{
BookContext db = new BookContext();
[HttpGet]
public ActionResult Buy()
{
return View(db.Books);
}
[HttpPost]
public ActionResult Result(Purchase purchase)
{
purchase = purchase; // <<<<<<<<< Here I get Books field == null <<<<<<<<<<<<<<<<<<
return View();
}
}
看法
最后,Buy 方法的视图:
@using HtmlHelpers.Models;
@model IEnumerable<Book>
@using (Html.BeginForm("Result", "Home", FormMethod.Post))
{
<div class="col-md-6">
<h2>Book purchasing</h2>
<table class="table">
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.Name</td>
<td>@item.Author</td>
<td>@item.Price</td>
<td>
@Html.CheckBoxFor(c => item.Selected)
@Html.HiddenFor(c => item.Id)
@Html.HiddenFor(c => item.Name)
@Html.HiddenFor(c => item.Author)
@Html.HiddenFor(c => item.Price)
</td>
</tr>
}
</table>
<input class="form-control" name="Person" placeholder="Name" />
<input class="form-control" name="Address" placeholder="Address" />
<input type="submit" class="btn btn-success" name="Submit" />
</div>
}
我最终没有在购买实例中获得选定书籍的列表。怎么了?
1 个回答