Несколько CheckBox MVC

76
09 января 2022, 20:40

Нужен выбор нескольких книг на форме

Модели

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();
    }
}

Вид

And, Finally, the view of Buy method:

@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>
}

В итоге я не получаю лист выбранных книг в экземпляре покупки. Что не так?

Answer 1
[HttpGet]
public ActionResult Buy()
{
    return View(new Purchase() { Books = db.Books.ToList() });
}
@model Purchase
...
    <table class="table">
        @for (int i = 0; i < Model.Books.Count; i++)
        {
            <tr>
                <td>@Model.Books[i].Id</td>
                ...
                <td>
                    @Html.CheckBoxFor(c => Model.Books[i].Selected)
                    @Html.HiddenFor(c => Model.Books[i].Id)
                    ...
READ ALSO
Извлечения картинок из твиттов

Извлечения картинок из твиттов

Я использую Standart API Твиттера для извлечения картинок из твиттовДля этого я использую конструкцию

160
Не получается принять данные из wc_get_order($order_id);

Не получается принять данные из wc_get_order($order_id);

Нужно собрать данные заказа после его отправки, но выдает ошибку

95