这个RenderAction做了什么,以及如何做?

时间:2009-06-02 14:24:36

标签: asp.net-mvc

我正在审查由第三方开发的一些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"

1 个答案:

答案 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>

如果值固定,为什么甚至将它作为模型的一部分传递?