컨트롤러에서 Html.EditorFor()와 동일한 기능을 호출하는 방법을 알고 계십니까?코드가 Html.EditorFor()에 해당합니다.
보기에 표준 표가 있습니다. 행은 EditorTemplate
<table id="tableOfBar">
<tfoot>
<tr><td colspan="2">Some paging controls and whatnot</td></tr>
</tfoot>
<tbody>
<% for (int i=0;i<Model.Rows.Count();i++)
{
int j = i;
%><%: Html.EditorFor(m => m.Rows[j], "FooRowTemplate", "Rows["+j+"]", new { OtherViewDataStuff})%>
</tbody>
</table>
편집기 템플릿이 강하게 <tr>
와 자식 요소를 반환 부분보기를 입력이다 사용합니다.
이 모든 것이 제대로 작동하지만 다음 단계는 '행 추가'버튼을 추가하는 것입니다. 여기서 범위를 벗어나는 여러 가지 이유 때문에 순수한 클라이언트 측 솔루션이 아니라 서버를 치고 싶습니다. 내가 뭘 하려는지 부분적인 뷰로 EditorTemplate을 반환하고 자바 스크립트가 HTML을 반환 받아 테이블에 추가 할 수 있습니다.
[HttpPost]
public ActionResult AddRow(FooModel model)
{
var row = new FooRowModel();
model.AddRow(row);
var index = model.Rows.IndexOf(row);
return PartialView("~/Areas/MyArea/Views/Shared/EditorTemplates/FooRowTemplate.ascx", model.Rows[index]);
}
위의 모든 내용은 입력 이름 지정을 제외하고는 잘 작동합니다. 누락 된 부분은 Model Binder에게 포스트 백 (post back)시 모델을 재구성하는 방법을 알려주는 콜렉션 접두어 (collection prefix stuff)입니다. 보기 측면에서 위의 내용 (위의 EditorFor()
호출의 "Rows["+j+"]"
부분)을 지정할 수 있습니다.
Partial View에 EditorFor()와 같은 html 필드 이름 접두사를 부여 할 수 있습니까? 이 작품을 만드는 방법에 대한 생각? 내 모든 접근 방식이 완전히 틀릴 수도 있습니다. 이유를 말해줘. :)
도움 주셔서 감사합니다.