请耐心等待,因为解释我所看到的问题可能相当困难,它正在炒我的大脑,因为它毫无意义(或者我缺少逻辑的一个关键组件)。
我有一个视图模型对象A
,我正在将它从控制器传递给强类型视图B
,该视图预期A
的类型的模型。当我将视图B
中的HTML封装在@using (Html.BeginForm(...))
块中时(我尝试使用FormMethod.Post
和FormMethod.Get
只是为了测试),运行时环境在运行到以下代码时抛出异常:
@for (int i = 0; i < Model.DataTable.Columns.Count; i++)
因为上面代码中的Model
为空。我逐步完成了返回视图模型A
到视图B
的操作,以确保我没有传入空模型,并且我可以保证我没有。事实上,在某些行中,我使用LINQ生成HTML(例如,yFor(x=>x.Report.Name)) BEFORE the aforementioned
用于`loop,这些行处理得很好。当我移除"封装块时,它工作正常。
关键是,几乎相同的代码在其他视图中与其他视图模型一起工作。我在另一个视图C
中使用了相同风格的for
循环,该视图期望视图模型D
,并且它都封装在一个"块中,就像我试图使用A
和B
一样。
编辑:这基本上就是它的样子。我希望这已经足够了。恐怕我不能再多付出了。
/* here is a very basic controller action */
[HttpGet]
public ActionResult View()
{
ViewModel vm = new ViewModel();
vm.Name = "view model test";
vm.Table = new DataTable();
return View(vm);
}
/* here is the view */
@model MyMVCProject.Models.ViewModel
@using (Html.BeginForm("View", "Controller", FormMethod.Post))
{
<h2>Test for: </h2>
@Html.DisplayFor(x => x.Name)
<p>Rows</p>
@for (int i = 0; i < Model.Table.Rows.Count; i++)
{
<p>@Model.Table.Rows[i].Name</p>
}
<input type="submit" value="OK"/>
}
啊。。。这太尴尬了。我确信编译器混淆了我的View
操作和我在操作中返回的View
类型。我重新命名了动作,一切都按预期进行。