2016-08-08 2 views
0

У меня есть форма, которая получает некоторые значения из модели. Затем в 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"); 
    } 
+2

Вы пропустили '@model CheckoutViewModel' вверху на вид –

+0

@J Сантош У меня там есть, я просто пропустил его при копировании. Добавлено его в исходное сообщение – Marinaro

+0

Что такое имя файла выше? –

ответ

0

Добавить в верхней части страницы

@model CheckoutViewModel 
+0

У меня его есть, я просто пропустил его при копировании. Добавлено в исходное сообщение – Marinaro

Смежные вопросы