0

컨트롤러에서 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 필드 이름 접두사를 부여 할 수 있습니까? 이 작품을 만드는 방법에 대한 생각? 내 모든 접근 방식이 완전히 틀릴 수도 있습니다. 이유를 말해줘. :)

도움 주셔서 감사합니다.

답변

1

당신이 찾고있는 것을 달성하는 방법을 자세히 설명하는 following blog post을 읽는 것이 좋습니다.

관련 문제