今天我面臨的一個問題,我不能夠獲取天氣我明白的東西錯了ASP.NET MVC(以及可能的MVC一般)或我錯過一些事情就是這樣實現。ASP.NET MVC渲染模型不是我期待
所以,我有一個簡單的模型層次:
public class Child
{
public Child(int notId, bool isSelected, string text)
{
NotId = notId;
IsSelected = isSelected;
Text = text;
}
public Child(){}
// naming: just to make sure I do not mess with some
// conventional infrastructure
public int NotId { get; set; }
public bool IsSelected { get; set; }
public string Text { get; set; }
}
public class Parent
{
public List<Child> Children { get; set; }
}
這是我HomeController
的編輯操作:
[HttpGet]
public ActionResult Edit()
{
var parent = new Parent
{
Children = new List<Child>
{
new Child(1, true, "a"),
new Child(2, false, "b")
}
};
return View(parent);
}
[HttpPost]
public ActionResult Edit(Parent parent)
{
parent.Children = new List<Child>
{
new Child(4, false, "c"),
new Child(5, true, "d")
};
return View(parent);
}
灰褐色是我Edit.aspx
觀點:
<!-- Standart HTML elements ommited -->
<% Html.BeginForm(); %>
<% for (var i = 0; i < Model.Children.Count; i++){%>
<div>
<%=Html.LabelFor(m => m.Children[i].IsSelected)%>
<%=Html.EditorFor(m => m.Children[i].IsSelected)%> <!-- lamda -->
<%=Html.CheckBoxFor(m => m.Children[i].IsSelected)%> <!-- lamda -->
<%=Html.CheckBox("A", Model.Children[i].IsSelected)%> <!-- simple -->
</div>
<% } %>
<input type="submit" value="Submit" />
<% Html.EndForm();%>
的要點是在Edit
(HttpGet)方法中我創建Parent
實例與具有兩個子元素Child
其IsSelected
屬性分別設定爲true
和false
。形式是Edit
(HttpPost)方法提出後,我給我的Parent
反對他們IsSelected
屬性分別設置爲false
和true
2種Child
元素的新兒童集合(即從HTTPGET方法對面),並調用View()
方法來呈現我的模型。
但我得到提交後複選框,以Html.EditorFor()
和Html.CheckBoxFor()
呈現不改變它們的狀態。它看起來像Html.EditorFor()
和Html.CheckBoxFor()
方法採取數據不是從我的模型,但從張貼的表單數據。
可能有人請解釋一下我這到底是怎麼回事,爲什麼ASP.NET MVC拒絕使我的模型?解決方法?修復了我的代碼?
在此先感謝。
P.S.我注意到了MVC2中的這種行爲,並認爲這是一種錯誤,但是當我用MVC3測試它時,它做了同樣的事情。
謝謝,它的工作 – Ramunas