Я пытаюсь передать viewModel в представление формы редактирования.Проблема в том, что я создаю экземпляр модели и присваиваю ей значения, но модель остается нулевой.
Мое действие:
public ActionResult OrderEdit(takeOrder FormInput)
{
takeOrder viewModel = new takeOrder
{
Name= "anonymous",
TableNumber = 13,
FoodItems = new List<FoodItem> {
new FoodItem{ DishName = "Dishname value 1", Price = 10 },
new FoodItem{ DishName = "Dishname value 2", Price = 20 },
new FoodItem{ DishName = "Dishname value 3", Price = 30 },
new FoodItem{ DishName = "Dishname value 4", Price = 40 },
}
};
if (FormInput != null)
viewModel = FormInput;
return View(viewModel);
}
И мой взгляд выглядит следующим образом:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/genesis.Master" Inherits="System.Web.Mvc.ViewPage<Genesis_0_02.Models.takeOrder>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
OrderEdit
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>OrderEdit</h2>
<% using (Html.BeginForm())
{ %>
<%: Html.ValidationSummary() %>
<p>
<%: Html.LabelFor(x => x.Name) %><br />
<%: Html.TextBoxFor(x => x.Name) %>
</p>
<p>
<%: Html.LabelFor(x => x.TableNumber) %><br />
<%: Html.TextBoxFor(x => x.TableNumber) %>
</p>
<button type="button" id="AddListItem">Add a dish to your order</button>
<br />
<% for (int i = 0; i < Model.FoodItems.Count(); i++ )%>
<% { %>
<div class="ListItem">
<button type="button" class="RemoveListItem">X</button>
Dish: <%: Html.TextBoxFor(x => x.FoodItems[i].DishName, new { style = "width:60px;" } )%>
Price: <%: Html.TextBoxFor(x => x.FoodItems[i].Price, new { style = "width:60px;" })%>
</div>
<% } %>
<br />
<button type="submit">Submit Order</button>
<% } %>
</asp:Content>
Я получаю ошибку:
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: source
Source Error:
Line 64: <button type="button" id="AddListItem">Add a dish to your order</button>
Line 65: <br />
--> error --> Line 66: <% for (int i = 0; i < Model.FoodItems.Count(); i++ )%>
Line 67: <% { %>
Line 68: <div class="ListItem">
Source File: pathtotheproject\Genesis.0.02\Genesis.0.02\Views\Admin\OrderEdit.aspx Line: 66
Я добавил точку останова на viewModel
в своем действии OrderEdit
, и все значения были переданы как нулевые в представление.Я не понимаю этого, потому что я жестко запрограммировал значения для каждого параметра.
Почему мой viewModel
нулевой?
edit
У меня есть javascript, который добавляет блюда кформа.Я исключил это из представленного выше представления, потому что оно не приводит к ошибке.
edit: ответ на ответ @Loki Stormbringer
Параметр FormInput
в public ActionResult OrderEdit(takeOrder FormInput)
предназначенбыть связанным с формпостом.
Когда я закомментирую:
// if (FormInput != null)
// viewModel = FormInput;
Тогда код работает как положено.Но я не понимаю, почему объект null
назначается, когда я специально проверяю, что объект не является нулевым.Предполагается, что если форма была отправлена, то viewModel
присваивается отредактированные значения, а если после отправки формы нет, viewModel
использует значения по умолчанию.В конечном итоге эти значения по умолчанию будут поступать из БД.
Почему if (FormInput != null)
возвращает true, если FormInput
равно нулю?