У меня проблема с тем, что должно быть очень простым ASP.NET MVC Create методом.
После того, как я заполню данные и отправлю форму в представлении Создать (и все правила валидации пройдены), экземпляр модели, переданный методу POST, будет содержать значения NULL или 0 для каждого поля и ModelState..IsValid вернет false.
Я использую Firebug для проверки параметров формы POST, и действие submit, очевидно, опубликовало все параметры из полей.Однако эти параметры не привязаны к модели, передаваемой методу POST в Контроллере, следовательно, модель (а именно материал в коде) содержит нулевые значения во всех полях (как проверено с использованием Watch и точек останова, помещенных в начале POST).method).
Параметры POST из Firebug:
Content-Type: application/x-www-form-urlencoded Content-Length: 228 MaterialNoMass.MaterialNoMassID=9mmPlasterboard&MaterialNoMass.RoughnessTypeID=3&MaterialNoMass.Resistance=0.0560&MaterialNoMass.ThermalAbsorptance=0.09&MaterialNoMass.SolarAbsorptance=0.07&MaterialNoMass.VisibleAbsorptance=0.07
Создание представления:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Database.Master"
Inherits="System.Web.Mvc.ViewPage<MvcDeepaWebApp.ViewModels.DatabaseSimpleMaterialViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm())
{%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Create MaterialNoMass</legend>
<%: Html.EditorFor(model => model.MaterialNoMass, new { RoughnessTypes = Model.RoughnessTypes })%>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
GET и POST методы Create в контроллере:
//
// GET: /DatabaseSimpleMaterial/Create
public ActionResult Create()
{
var viewModel = new DatabaseSimpleMaterialViewModel
{
MaterialNoMass = new MaterialNoMass(),
RoughnessTypes = deepaDB.RoughnessTypes.ToList()
};
return View(viewModel);
}
//
// POST: /DatabaseSimpleMaterial/Create
[HttpPost]
public ActionResult Create(MaterialNoMass material)
{
if (ModelState.IsValid)
{
MaterialAllType mt = new MaterialAllType();
mt.MatID = material.MaterialNoMassID;
mt.MatTypeID = deepaDB.MaterialTypes.Single(type => type.MatType == "SimpleMaterial").MatTypeID;
material.MatTypeID = mt.MatTypeID;
deepaDB.AddToMaterialAllTypes(mt);
deepaDB.AddToMaterialNoMasses(material);
deepaDB.SaveChanges();
return RedirectToAction("Index");
}
//Error occurred
var viewModel = new DatabaseSimpleMaterialViewModel
{
MaterialNoMass = material,
RoughnessTypes = deepaDB.RoughnessTypes.ToList()
};
return View(viewModel);
}
К вашему сведению, всякий раз, когда создается новый MaterialNoMass, новый экземпляр MaterialAllType также должен создаваться с использованием того же идентификатора MaterialNoMass.Я еще даже не достиг стадии изменения базы данных, поскольку привязка модели, кажется, не работает.
Я использовал аналогичный подход Create в других контроллерах в приложении, и все они работают нормально, за исключениемэтот контроллер.Последние два дня мне было трудно отлаживать это.Пожалуйста, помогите!