我正在尝试弄清楚我是否误解了有关 ASP.NET MVC 的某些内容,或者我是否在 ASP.NET MVC Beta 3 中发现了某种错误。我在使用 HTML Helper 时遇到了 PartialView 拾取错误模型的问题扩展
我的控制器代码如下所示:
public ActionResult EditGeneral(MapGeneralViewModel vm)
{
var query = MapGeneralViewModel.ToModel(vm, svcMaps);
return PartialView("General", MapGeneralViewModel.FromModel(query));
}
在这是一个插入的情况下,属性vm.Id以 -1 开始,在调用MapGeneralViewModel.ToModel之后,它已被持久化到数据库中,并且 query.Id 具有适当的值。
对MapSettingsViewModel.FromModel的调用返回一个新的视图模型,并且我检查了 Id 属性是否正确包含新创建的 id 值。
视图的相关位如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AdminWebRole.Models.Map.MapGeneralViewModel>" %>
<%: Model.Id %>
<%= Html.Hidden("IdTest", Model.Id) %>
<%= Html.HiddenFor(model => model.Id) %>
如果我在视图中放置断点,则Model.Id会正确设置为正确的值。
控制器的实际输出(当Model.Id == 70 时)如下所示:
70
<input id="IdTest" name="IdTest" type="hidden" value="-1" />
<input id="Id" name="Id" type="hidden" value="-1" />
因此,不使用 HTML 助手的值输出是正确的,但是助手输出的值以某种方式获取了传递给控制器的视图模型!
我不知道这是怎么回事。我尝试了各种方法:
- 使用View()而不是PartialView()
- 将MapGeneralViewModel.FromModel()的结果分配给vm,然后将vm传递给视图
- 使用<%:和<%=
- 将vm设置为 null(旧的视图模型仍然被使用)
- 将传入 id 的值更改为 0(导致在视图中输出 0 而不是 -1)
- 问题并非特定于名为“Id”的属性,我还测试了具有相同结果的其他字段
我是否对这应该如何工作感到困惑,或者我遇到了 beta 错误?如果它有任何区别,这是在 Win7 64 位机器上的本地 Azure 运行时中运行的。