【发布时间】:2012-08-04 08:07:25
【问题描述】:
我有一个强类型的局部视图,它的模型包含一个与父页面的视图模型同名的属性。出于某种原因,渲染引擎正在渲染父视图模型的值,而不是预期的值(嗯,至少是我预期的值!)
父页面视图模型提取:
public class ParentPageViewModel
{
public int Id { get; set; } // problem property
...
public IEnumerable<ChildViewModel> Children { get; set; }
}
子页面视图模型提取:
public class ChildViewModel
{
public int Id { get; set; } // problem property
...
}
父页面提取(Razor):
@model ParentPageViewModel
...
@foreach (var item in Model.Children)
{
@Html.Partial("MyPartialView", item)
}
...
部分视图摘录:
@model ChildViewModel
...
<form ...>
@Html.HiddenFor(m => m.Id) // problem here - get ParentPageViewModel.ID not ChildViewModel.Id
</form>
...
所以基本上在我的渲染输出中,我的隐藏字段具有父视图模型元素的值,而不是传递给局部视图的值。这肯定是由名称引起的,因为将 @ChildViewModel.Id@ 的名称更改为 @ChildViewModel.ChildId@ 使其按预期工作。有趣的是,在调试器中检查视图模型值时,我确实看到了正确的值;只有渲染的输出是错误的。
有没有办法绕过这个或“正确”的方式来做我想做的事情(我在表格中呈现迷你表单以进行 ajax 验证/发布对表格行的更新)
谢谢,
提姆
【问题讨论】:
-
HtmlHelpers 将首先从 ModelState 字典中获取值(甚至超过模型中的值) - 看起来这就是这种行为的原因。
标签: c# asp.net-mvc razor partial-views asp.net-mvc-viewmodel