今天我面临的一个问题,我不能够获取天气我明白的东西错了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