我正在创建一个更新两个相关模型的表单,对于此示例,一个带有一组任务的项目,我希望控制器接受一个项目,该项目的任务集合从表单输入加载.我有这个工作,基本上下面的代码没有部分.
这可能听起来很傻但我无法弄清楚如何从部分访问计数器(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; }
}
Run Code Online (Sandbox Code Playgroud)
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))
}
}
Run Code Online (Sandbox Code Playgroud)
_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
Run Code Online (Sandbox Code Playgroud)
注意上面的String.Format我是硬编码0,我想使用ViewDataDictionary参数,该参数绑定到来自调用View的变量i
hou*_*se9 130
猜猜我发布的太快了.这个帖子得到了我正在寻找的答案
asp.net MVC RC1 RenderPartial ViewDataDictionary
我最终使用了这种简洁的语法
@Html.Partial("_TaskForm", Model.Tasks[i], new ViewDataDictionary { {"counter", i} } )
Run Code Online (Sandbox Code Playgroud)
然后在局部视图中
@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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70518 次 |
| 最近记录: |