У меня есть форма, которая получает некоторые значения из модели. Затем в POST вводится пользователь данных, и пользователь перенаправляется на другую страницу. Однако каждый раз, когда я отправляю форму, я получаю null-reference exeption. Где я могу сделать ошибку?Исключение Null ссылки после POST
Ни один из других вопросов, задающих вопрос об этом, не решил мою проблему, поэтому я снова спрашиваю свой код.
В exeptions находятся в цикл просмотра - Model.Cart, Model.ShippingOptionsm и т.д.
@model CheckoutViewModel
@{
ViewBag.Title = "Checkout";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Checkout</h2>
<table class="table">
<thead>
<tr>
<td>#</td>
<td>Name</td>
<td>Quantity</td>
<td>Price</td>
<td>Total price</td>
</tr>
</thead>
@foreach (CartItem i in Model.Cart)
{
<tr>
<td>@Html.Action("ProductPosition", "Cart", new { item = i })</td>
<td>@i.Name</td>
<td>@i.Quantity</td>
<td>@i.Price €</td>
<td>@i.Total €</td>
</tr>
}
</table>
<h3>Total: @Html.Action("TotalPrice", "Cart") €</h3>
@using (Html.BeginForm("Checkout", "Cart"))
{
@Html.AntiForgeryToken()
<h2>Address</h2>
<div class="form-group">
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Name)
</div>
<div class="form-group">
@Html.LabelFor(m => m.Address)
@Html.TextBoxFor(m => m.Address, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Address)
</div>
<div class="form-group">
@Html.LabelFor(m => m.City)
@Html.TextBoxFor(m => m.City, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.City)
</div>
<div class="form-group">
@Html.LabelFor(m => m.PostNumber)
@Html.TextBoxFor(m => m.PostNumber, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.PostNumber)
</div>
<div class="form-group">
@Html.LabelFor(m => m.State)
@Html.TextBoxFor(m => m.State, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.State)
</div>
<h2>Shipping</h2>
foreach (var i in Model.ShippingOptions)
{
<div class="radio">
@Html.RadioButtonFor(m => m.ShippingOption, i.Id) @i.Name - @i.Price €
</div>
}
@Html.ValidationMessageFor(m => m.ShippingOption);
<h2>Payment</h2>
foreach (var i in Model.PaymentOptions)
{
<div class="radio">
@Html.RadioButtonFor(m => m.PaymentOption, i.Id) @i.Name
</div>
}
@Html.ValidationMessageFor(m => m.PaymentOption);
<button type="submit" class="btn btn-primary">Continue</button>
}
@section scripts
{
@Scripts.Render("~/bundles/jqueryval")
}
Контроллер:
Объявление моделиpublic ActionResult Checkout()
{
if (Session["cart"] == null)
return RedirectToAction("Index");
var checkout = new CheckoutViewModel()
{
Cart = (List<CartItem>)Session["cart"],
PaymentOptions = _context.PaymentOptions.ToList(),
ShippingOptions = _context.ShippingOptions.ToList()
};
return View(checkout);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Checkout(CheckoutViewModel m)
{
if (!ModelState.IsValid)
return View();
//TODO: handle data
return RedirectToAction("OrderSuccess");
}
Вы пропустили '@model CheckoutViewModel' вверху на вид –
@J Сантош У меня там есть, я просто пропустил его при копировании. Добавлено его в исходное сообщение – Marinaro
Что такое имя файла выше? –