私は、非常に単純なASP.NET MVC Createメソッドでなければならないものに問題があります。HttpPost CreateのASP.NET MVCエラー - POST後にモデルに渡されたNULL値 - モデルバインディングの問題?
データを入力して作成ビューでフォームを送信すると(すべての検証ルールが渡された)、POSTメソッドに渡されたモデルのインスタンスには、各フィールドおよびModelState.IsValidにnull値または0値が含まれます。 falseを返します。
私はFirebugを使用してPOSTフォームのパラメータをチェックしています。送信アクションで明らかにフィールドのすべてのパラメータが投稿されています。ただし、これらのパラメータは、コントローラのPOSTメソッドに渡されるモデルにはバインドされないため、モデル(つまり、コード内の素材)には、すべてのフィールドにNULL値が含まれます(POSTの開始時に配置されるウォッチポイントとブレークポイントを使用してチェックされます方法)。 Firebugのから
POSTパラメータ:コントローラーのCreateの
<%@ 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メソッド:FYI
//
// 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が作成されるたびに
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
は、ビューの作成しますMaterialNoMassと同じIDを使用して、MaterialAllTypeの新しいインスタンスも作成する必要があります。モデルのバインディングが機能していないと思われるので、私はまだデータベースを変更する段階に達していません。
私は、アプリケーション内の他のコントローラで同様の作成方法を使用しましたが、これらはすべてこのコントローラ以外は正常に動作します。私は過去2日間、これをデバッグするのに苦労してきました。助けてください!
ありがとうございました!できます!なぜ私は、(ドロップダウンリストを設定するために)GETでViewModelsを渡し、POSTアクションのパラメータとしてのみモデルクラスを使用する他のコントローラでバインドプレフィックスを設定しないと逃げることができないのだろうかと思います。 – fsalim