我正在审查由第三方开发的一些ASP.NET MVC代码,并在视图中遇到以下标记:
<div class="panel_body">
<% Html.RenderAction(((string[])Model)[0], "Customer"); %>
</div>
<!-- Some HTML omitted -->
<div class="wizard_body">
<% Html.RenderAction(((string[])Model)[0], "Journey"); %>
</div>
有谁能告诉我为什么模型需要这样的转换和数组访问?
视图不是强类型的。
两个RenderAction
呈现两个单独的视图,这两个视图在两个单独的ASP.NET MVC项目中定义。
此视图使用以下操作方法启动
public ActionResult Index()
{
return View(new []{"Search"});
}
因此((string[])Model)[0]
将返回"Search"
。
答案 0 :(得分:4)
因为视图不是强类型的,所以Model
是object类型。显然,他们实际上已经为Model变量分配了一个字符串数组,并且要渲染的操作的名称是该数组的第一个元素。因此,他们将Model转换为字符串数组并提取第一个元素。
编辑:如果确实如此,那么您可以通过强烈输入string[]
视图来避免强制转换。他们你可以简单地做索引。代码本身让我对它的质量有点怀疑。我可能已将操作名称放入ViewData并按名称引用它或使用具有视图特定模型的强类型视图,以便我可以通过属性名称引用操作。无论哪种方式都比你拥有的更清楚。我建议使用特定于视图的模型对强类型视图进行重构,除非这是以这种方式引用的唯一属性。
编辑2 :根据您的更新,我会将其更改为:
public ActionResult Index()
{
return View();
}
和
<div class="panel_body">
<% Html.RenderAction("Search", "Customer"); %>
</div>
<!-- Some HTML omitted -->
<div class="wizard_body">
<% Html.RenderAction("Search", "Journey"); %>
</div>
如果值固定,为什么甚至将它作为模型的一部分传递?