【问题标题】:MVC - Dynamically loading Partial ViewsMVC - 动态加载局部视图
【发布时间】:2009-08-10 13:55:44
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc partial-views viewusercontrol


    【解决方案1】:

    如果您希望能够按照您的描述进行操作,您可能有兴趣阅读有关 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); %>
    

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

    【讨论】:

    • 我看过你的代码,但不明白流程。你会发布一个小的完整工作示例代码吗?谢谢
    【解决方案2】:

    创建具有逻辑并返回 Partials as string 的辅助函数可能会产生相同的结果。并且将比 RichardOD 建议的虚拟功能具有更多的可移植性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2020-05-09
      • 2022-10-07
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多