我在創建HttpGet頁面時模型有效,但在HttpPost上無效(某些屬性爲null)時出現問題。MVC3 ModelState在HttpPost上無效
這裏是我的電話打開頁面:
var quote = new Quote
{
Agency = assignedAgency,
Insured = insured,
RiskAddress = insured.Address
};
db.Quotes.Add(quote);
db.SaveChanges();
return RedirectToAction("Edit", "Quote", quote.QuoteID);
而且HTTPGET的ActionResult - 在這一點上,該模型是有效的。被保險人和代理人的資產已填充,並且其各自的地址屬性也已填充。
[HttpGet]
public ActionResult Edit(int quoteID)
{
var model = db.Quotes.Find(quoteID);
return View(model);
}
而且HTTPPORT的ActionResult - 在這種方法的進入,被保險人,代理銷售和它們各自的地址屬性爲null,造成無效模式狀態。
[HttpPost]
public ActionResult Edit(Quote model)
{
if (ModelState.IsValid)
{
if (model.SubCosts > 0)
{
model.InsuredSubs = true;
model.SubClassCode = "95626 - Subcontractor - TEST CLASS";
model.SubClassExposure = model.SubCosts;
}
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Edit", new { quoteID = model.QuoteID });
}
return View(model);
}
和HTML:
@model DomaniOnline.Models.DomaniData.Quote
@{
ViewBag.Title = "Classification";
}
<h2>General Liability Classification</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
@Html.HiddenFor(model => model.QuoteID)
@Html.HiddenFor(model => model.Insured)
@Html.HiddenFor(model => model.Insured.Address)
@Html.HiddenFor(model => model.RiskAddress)
@Html.HiddenFor(model => model.Agency)
@Html.HiddenFor(model => model.Agency.Address)
.
.
.
.
<p>
@Html.ActionLink("Back to Insured Info", "Edit", "Insured", new { insuredID = Model.Insured.InsuredID }, null)
<input type="submit" value="Save & Continue" />
</p>
</fieldset>
}
我想指出的是,「回到投保信息」 ActionLink的頁面底部工作得很好,並能提供正確的model.Insured.InsuredID。但出於某種原因,將表單提交給HttpPost時,任何屬性爲自定義數據類型的爲空。 Html.HiddenFor <>被添加爲測試,同時試圖讓這個工作。
編輯:類:
public class Quote
{
public virtual int QuoteID { get; set; }
public virtual Address RiskAddress { get; set; }
public virtual Agency Agency { get; set; }
public virtual Insured Insured { get; set; }
public virtual DateTime PropEffDate { get; set; }
public virtual bool InsuredSubs { get; set; }
public virtual int SubCosts { get; set; }
.
.
.
}
public class Address
{
[Required]
public virtual string StreetAddress { get; set; }
[Required]
public virtual string City { get; set; }
[Required]
public virtual string State { get; set; }
[Required]
public virtual string ZipCode { get; set; }
}
public class Insured
{
public virtual int InsuredID { get; set; }
[Required]
public virtual string Name { get; set; }
[Required]
public virtual Address Address { get; set; }
public virtual string DBA { get; set; }
[Required]
public virtual string BusinessType { get; set; }
public virtual string Phone { get; set; }
}
請向我們展示課程。另外,請考慮使用單獨的ViewModels;那可能會解決這個問題。 – SLaks 2012-02-17 18:09:44