2011-02-01 2 views
50

두 개의 관련 모델을 업데이트하는 양식을 작성 중입니다. 예를 들어 태스크 컬렉션이있는 프로젝트의 경우 컨트롤러가 양식 입력에서로드 된 태스크 컬렉션을 가진 단일 프로젝트를 승인하도록합니다. 나는 부분적으로이 코드를 본질적으로 아래 코드와 함께 가지고있다.asp mvc 부분 - 어떻게 ViewDataDictionary에 액세스합니까?

이것은 어리석게 들릴지 모르지만 부분에서 카운터 (i)에 액세스하는 방법을 알아낼 수 없습니까?

모델

public class Project 
{ 
    public string Name { get; set; } 
    public List<Task> Tasks { get; set; } 
} 

public class Task 
{ 
    public string Name { get; set; } 
    public DateTime DueDate { get; set; } 
} 

Create.cshtml (보기)

@model MyWebApp.Models.Project 

@using(Html.BeginForm("Create", "Project", FormMethod.Post, new { id = "project-form" })) 
{ 
    <div> 
     @Html.TextBox("Name", Model.Name) 
    </div> 

    @for(int i = 0; i < Model.Tasks.Count; i++) 
    { 
     @Html.Partial("_TaskForm", Model.Tasks[i], new ViewDataDictionary<int>(i)) 
    } 

} 

_TaskForm.cshtml (부분보기)

@model MyWebApp.Models.Task 

<div> 
    @Html.TextBox(String.Format("Tasks[{0}].Name", 0), Model.Name) 
</div 
<div> 
    @Html.TextBox(String.Format("Tasks[{0}].DueDate", 0), Model.DueDate) 
</div 

참고 내가 공을 하드 코딩하고 위 및 String.format, 호출보기에서 변수 i에 바인딩 된 ViewDataDictionary 매개 변수를 사용하려고합니다.

답변

103

내가 너무 빨리 올린 것 같아요. 이 스레드는 나는 부분보기에 그런 다음이 간결한 구문

@Html.Partial("_TaskForm", Model.Tasks[i], new ViewDataDictionary { {"counter", i} }) 

를 사용하여 결국 내가

asp.net MVC RC1 RenderPartial ViewDataDictionary

찾고 있던 답을했다

@model MyWebApp.Models.Task 
@{ 
    int index = Convert.ToInt32(ViewData["counter"]); 
} 

<div> 
    @Html.TextBox(String.Format("Tasks[{0}].Name", index), Model.Name) 
</div> 
<div> 
    @Html.TextBox(String.Format("Tasks[{0}].DueDate", index), Model.DueDate) 
</div>