오늘은 문제에 직면했습니다. 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);
}
HESE 내 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) 메서드에서 나는을 만듭니다.IsSelected
속성을 갖는 두 개의 자식 Child
요소가있는 인스턴스는 각각 true
및 false
으로 설정됩니다. 양식 Edit
(HttpPost) 방식으로 제출 한 후 내 모델을 렌더링하는 내 Parent
(즉 방법 HttpGet을에서 반대) 각각 false
및 true
로 설정 자신의 IsSelected
속성이 개 Child
요소의 새로운 자식 컬렉션 개체 및 전화 View()
방법을 제공합니다.
하지만 제출 후 체크 박스는 Html.EditorFor()
및 Html.CheckBoxFor()
으로 렌더링되어 상태가 변경되지 않습니다. Html.EditorFor()
및 Html.CheckBoxFor()
메서드는 내 모델에서 데이터가 이 아닌인데 게시 된 양식 데이터에서 가져옵니다.
누군가가 여기에 무슨 일이 일어나고 있는지 설명하고 ASP.NET MVC가 내 모델을 렌더링하는 것을 거부하는 이유를 설명해 주시겠습니까? 해결 방법은 무엇입니까? 내 코드가 수정 되었습니까?
미리 감사드립니다.
P. MVC2에서이 동작을 감지하고 이것이 일종의 버그라고 생각했지만 MVC3에서 이것을 테스트했을 때 똑같은 일을했습니다.
감사합니다, 그것은 – Ramunas