2011-02-01 41 views
50

我正在創建一個表單,用於更新兩個相關模型,對於此示例中包含任務集合的項目,我希望控制器接受單個項目,該項目的任務集合已從表單輸入中加載。我有這個工作,基本上是下面的代碼沒有部分。asp mvc partial with model and ViewDataDictionary - 如何訪問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 

註上述我硬編碼0的String.Format,我想使用ViewDataDictionary參數綁定到變量我從調用視圖

回答

103

猜我發佈得太快。這個線程有我一直在尋找

asp.net MVC RC1 RenderPartial ViewDataDictionary

的答案,我結束了在局部視圖使用這種簡潔的語法

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

然後

@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> 
相關問題