2009-08-10 207 views
2

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

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

回答

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); %> 

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

+0

我已经看到你的代码,但不理解流程。所以你会发布一个小的完整工作示例代码。谢谢 – Thomas 2015-11-30 08:50:32

1

创建具有逻辑和返回Partials as string可能会导致相同的辅助功能。并且将比RichardOD建议的虚拟功能更具可移植性。