2

我试图通过传递我想要的部分视图的路径列表然后在每个视图上调用 RenderPartial 来将部分视图动态加载到视图中。这似乎可以解决问题。当我尝试将模型传递给局部视图时,问题就出现了。由于我是动态加载它们的,所以我不完全知道要为特定的局部视图传递哪个模型。我不想填充每个可能的对象,我正在考虑使用反射和配置查找来为每个局部视图动态加载模型。我也在考虑添加一个 ActionFilter,它会自动为我填充正确的模型值,但即使是这个实现也必须使用反射。有没有人有任何其他建议?

我想念在 MVC 中看不到的常规 ASP.NET 用户控件的一件事。用户控件封装了自己的数据检索逻辑,而在 MVC 中,主控制器需要了解它。这意味着如果我要为另一个控制器使用局部视图,该控制器还必须知道如何获取该局部视图的模型。我在这里错过了什么吗?谢谢。

4

2 回答 2

4

如果您希望能够按照您的描述进行操作,您可能有兴趣阅读有关Html.RenderAction()的内容。这在许多情况下很有用,但不是“纯粹的”MVC(可能是实用的 MVC)。

我和你有类似的情况,我使用部分视图来加载不同的搜索屏幕(搜索提交按钮相同),只是表单字段不同。

我按以下方式进行。在一个通用的基类控制器中,我有通用类型参数,我将其传递给视图模型对象(SearchObject 是对象类型)。

public abstract class SampleController<T>  : Controller where T : new()
public virtual ActionResult SearchForDocuments()
        {
            searchModel.SearchObject = // Create type of T;
            // Some more code
            return View("SomeView", searchModel);
        }

然后我有一个强类型视图,它将 SearchObject 传递给局部视图。

 <% Html.RenderPartial(@"../Search/SearchCriteriaTemplates/" + /*Specific view name*/, Model.SearchObject); %>

然后局部视图是强类型的,并且知道如何处理强类型模型。

于 2009-08-10T14:07:46.830 回答
1

创建一个具有逻辑并以字符串形式返回 Partials的辅助函数可能会产生相同的结果。并且将比 RichardOD 建议的虚拟功能具有更多的可移植性。

于 2009-08-10T14:31:57.760 回答