我有一個類包含另一個類作爲它的一個屬性。爲什麼默認模型聯編程序不會在回發中更新我的部分視圖模型?
public class SiteProperties
{
public SiteProperties()
{
DropFontFamily = "Arial, Helvetica, Sans-serif";
}
public string DropFontFamily { get; set; }
private ResultPageProperties m_ResultPagePropertyList;
public ResultPageProperties ResultPagePropertyList
{
get
{
if (m_ResultPagePropertyList == null)
m_ResultPagePropertyList = new ResultPageProperties();
return m_ResultPagePropertyList;
}
set { m_ResultPagePropertyList = value; }
}
}
第二類有一個屬性
public class ResultPageProperties
{
public ResultPageProperties()
{
ResultFontFamily = "Arial, Helvetica, Sans-serif";
}
public string ResultFontFamily { get; set; }
}
我只是控制器抓住SiteProperties並返回視圖。提交時,它接受SiteProperties並返回相同的視圖。
public class CompanyController : Controller
{
public ActionResult SiteOptions(int id)
{
SiteProperties site = new SiteProperties();
PopulateProperyDropDownLists();
return View("SiteOptions", site);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SiteOptions(SiteProperties properties)
{
PopulateProperyDropDownLists();
return View("SiteOptions", properties);
}
private void PopulateProperyDropDownLists()
{
var fontFamilyList = new List<SelectListItem>();
fontFamilyList.Add(new SelectListItem() { Text = "Arial, Helvetica, Sans-serif", Value = "Arial, Helvetica, Sans-serif" });
fontFamilyList.Add(new SelectListItem() { Text = "Times New Roman, Times, serif", Value = "Times New Roman, Times, serif" });
fontFamilyList.Add(new SelectListItem() { Text = "Courier New, Courier, Monospace", Value = "Courier New, Courier, Monospace" });
ViewData["FontFamilyList"] = fontFamilyList;
}
}
該視圖包含呈現ResultPageProperties模型的局部視圖。
<% using (Html.BeginForm("SiteOptions", "Company", FormMethod.Post))
{%>
<p><input type="submit" value="Submit" /></p>
<div>View level input</div>
<div>
<label>Font family</label><br />
<%= Html.DropDownListFor(m => m.DropFontFamily, ViewData["FontFamilyList"] as List<SelectListItem>, new { Class = "UpdatesDropDownExample" })%>
</div>
<% Html.RenderPartial("ResultPagePropertyInput", Model.ResultPagePropertyList); %>
<% } %>
的部分只是
<div style='margin-top: 1em;'>View level input</div>
<div>
<label>Font family</label><br />
<%= Html.DropDownListFor(m => m.ResultFontFamily, ViewData["FontFamilyList"] as List<SelectListItem>, new { Class = "UpdatesResultPageExample" })%>
</div>
OK,所以當頁面呈現,您在這兩種選擇得到 「宋體,...」。如果您爲兩者選擇另一個選項並單擊提交,則該資源夾將填充SiteProperties對象並將其傳遞給控制器。但是,ResultFontFamily始終包含原始值。我期待它具有用戶選擇的價值。
我錯過了什麼?
感謝您的幫助Hurricanepkt。我認爲聲明ResultFontFamily屬性的兩種方法是等價的。這讓我想起了我初始化類屬性的方式。由於我在我的getter中檢查null,我總是得到原始值。當我把它拿出來時,我在後控制器方法上留下了一個空值。 – user313118 2010-04-09 21:30:20