2011-02-01 7 views
50

私は2つの関連するモデルを更新するフォームを作成しています。この例では、タスクのコレクションを持つプロジェクトは、フォーム入力から読み込まれたタスクコレクションを持つ単一のプロジェクトをコントローラが受け入れるようにします。私はこの作業、本質的に部分的なコードなしで以下のコードを持っています。モデルとViewDataDictionaryのasp mvc partial - 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 

NOTE私は0をハードコーディングしています上記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> 
関連する問題