Asp.net mvc 使用RenderAction渲染用户控件

Asp.net mvc 使用RenderAction渲染用户控件,asp.net-mvc,Asp.net Mvc,在我的输入表单上,我让用户选择一个状态。状态列表存储在数据库中(因为我们还不支持每个状态)。此列表很少更改 所以我想使用RenderAction来渲染控件,只是因为我不想将每个ViewModel的状态列表传递给视图。此操作的结果是下拉列表 因为这是一个输入控件,所以它需要有一个名称。因此,从我的主要观点来看,我将渲染称为: @Html.RenderAction("GetStates", "Data", new { controlName = "states" }); 传递controlName

在我的输入表单上,我让用户选择一个状态。状态列表存储在数据库中(因为我们还不支持每个状态)。此列表很少更改

所以我想使用
RenderAction
来渲染控件,只是因为我不想将每个ViewModel的状态列表传递给视图。此操作的结果是下拉列表

因为这是一个输入控件,所以它需要有一个名称。因此,从我的主要观点来看,我将渲染称为:

@Html.RenderAction("GetStates", "Data", new { controlName = "states" });
传递
controlName
感觉不对劲。我觉得我在滥用
RenderAction
来创建用户控件,而
@Html.Partial
更合适,另一方面,我不想将状态列表传递给
@Html.Partial
,因为该信息与表示问题更相关


问题我是否应该继续使用RenderAction并按上述方式传递controlName?还是有更好的解决方案?

将controlname作为参数传递没有什么错。我会同意的


此外,从数据库中获取的状态列表。如果您在页面上多次显示此列表。。。将其存储在TempData中。如果tempdata中存在,则检索并使用它保存数据库命中。您甚至可以将其缓存得更高。

这就是目的,使用RenderAction可以让我使用开箱即用的缓存属性。嗯,我会研究一下。上次我听说您不能将Cache Attr与部分视图一起使用。与中一样,它不会缓存我的坏,[OutputCache(Duration=3600)],而不会缓存属性