部分和重复的Viewmodel

时间:2012-11-10 22:38:00

标签: razor asp.net-mvc-4

我真的很奇怪。所以,我的结构是这样的

<div id="tasks">
   @Html.Partial("_Tasks", tasks)
</div>

并且在_Tasks中我通过所有任务执行操作,并且对于每个任务,我都有其他部分

...
@Html.Partial("_Time", new TimeViewModel(task))
...

在_Time内部我有表格

...
@Html.TextBoxFor(m => m.Name)
....

所以在一个视图中我渲染了一个局部,然后再渲染了多个局部,并在里面渲染了一个形状。当我执行页面加载时,它可以工作。问题从我使用ajax开始,所以我执行编辑到时间并发布到服务器并使用返回的html更新#tasks。

我是我的控制器动作......

...
return View("_Tasks", tasks);

现在的问题是@ Html.TextBoxFor(m =&gt; m.Name)生成的所有输入都具有相同的值。为什么?如果我做

@Html.DisplayFor(m => m.Name)

我工作得很好。我也试过

@Html.TextBoxFor(m => m.Name, new { Value = Model.Name })

它有效,但它看起来像我一样。

问题是,为什么会出现这种行为?为什么所有TextBoxFor都具有相同的值?

1 个答案:

答案 0 :(得分:1)

ASP.NET MVC中的默认模型绑定器确定如何使用输入标记上的名称属性将值映射到模型。所有的html帮助程序都会生成标记。

所以当你写

@Html.TextBoxFor(m => m.Name)

它生成如下内容:

<input type="text" name="Name" />

但是,当您在局部视图中使用此帮助程序并尝试绑定作为主模型属性的模型时,它将无法工作。部分中的Html助手仍然会生成标记,认为其模型是主要模型。因此,您的输入将绑定到主模型的Name属性。您可以查看this question来解决此问题。处理发布请求时请记住default binder can not pick up complex collections