2

我有一个很奇怪的问题。所以,我的结构是这样的

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

在 _Tasks 我对所有任务进行 foreach 并且对于每个任务我都有额外的部分

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

在_Time里面我有表格

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

因此,在一个视图中,我渲染了一个局部,然后又在内部渲染了多个局部,并在其中呈现了一个表单。当我执行页面加载时,它可以工作。问题始于我使用 ajax 时,因此我对 Time 执行编辑并发布到服务器并使用返回的 html 更新#tasks。

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

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

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

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

我工作得很好。我也试过

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

它有效,但对我来说看起来很糟糕。

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

4

1 回答 1

1

ASP.NET MVC 中的默认模型绑定器确定如何通过使用输入标记上的名称属性将值映射到模型。考虑到这一点,所有 html 助手都会生成标记。

所以当你写

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

它会生成如下内容:

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

但是,当您在局部视图中使用此帮助程序并尝试绑定作为主模型属性的模型时,它将不起作用。部分中的 Html 助手仍会生成标记,认为其模型是主要模型。因此,您的输入将绑定到主模型的 Name 属性。你可以看看这个问题来解决这个问题。还要记住,当您处理发布请求时,默认活页夹无法拾取复杂的集合。

于 2012-11-10T22:48:46.363 回答