Asp.net mvc 这个渲染在做什么,怎么做?

Asp.net mvc 这个渲染在做什么,怎么做?,asp.net-mvc,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((

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

因此,
((string[])Model)[0]
将返回
“Search”
,因为视图不是强类型,
Model
是object类型。显然,他们实际上为模型变量分配了一个字符串数组,要呈现的动作的名称是数组的第一个元素。因此,他们将模型转换为字符串数组并提取第一个元素

编辑:如果事实上是这样,那么您可以通过将视图强类型化为
string[]
来避免强制转换。你可以简单地做索引。代码本身让我对它的质量有点怀疑。我可能会将操作名称放入ViewData中并按名称引用它,或者使用具有视图特定模型的强类型视图,以便通过属性名称引用操作。任何一种方式都比你所拥有的更清晰。我建议使用视图特定的模型重构到强类型视图,除非这是以这种方式引用的唯一属性

编辑2:根据您的更新,我会将其更改为:

public ActionResult Index()
{
    return View();
}



如果值是固定的,为什么还要将其作为模型的一部分传递呢?

因为视图不是强类型,
model
是object类型的。显然,他们实际上为模型变量分配了一个字符串数组,要呈现的动作的名称是数组的第一个元素。因此,他们将模型转换为字符串数组并提取第一个元素

编辑:如果事实上是这样,那么您可以通过将视图强类型化为
string[]
来避免强制转换。你可以简单地做索引。代码本身让我对它的质量有点怀疑。我可能会将操作名称放入ViewData中并按名称引用它,或者使用具有视图特定模型的强类型视图,以便通过属性名称引用操作。任何一种方式都比你所拥有的更清晰。我建议使用视图特定的模型重构到强类型视图,除非这是以这种方式引用的唯一属性

编辑2:根据您的更新,我会将其更改为:

public ActionResult Index()
{
    return View();
}



如果值是固定的,为什么还要将其作为模型的一部分传递?

您想要什么?您描述了正在发生的事情,那么您还想要什么呢?我正在试图弄清楚为什么需要强制转换和阵列访问,即((字符串[])模型)[0]您想要什么?您描述了正在发生的事情,那么您还想要什么呢?我正在试图弄清楚为什么需要强制转换和阵列访问,即((字符串[])模型)[0]我同意-并且对代码中采用的方法感到有些困惑…我同意tvanfosson关于代码的气味因素的看法。这只是因为它表明,原作者可能不知道如何干净地做他们试图做的事情。我同意——并且对代码中采取的方法感到有些困惑……我同意tvanfosson关于代码气味因素的观点。这只是因为它表明,原作者可能不知道如何干净利落地做他们试图做的事情。
<div class="panel_body">   
    <% Html.RenderAction("Search", "Customer"); %>
</div>
<!-- Some HTML omitted -->
<div class="wizard_body">
    <% Html.RenderAction("Search", "Journey"); %>
</div>