【问题标题】:MVC HTML Helper, get parent view of current partial viewMVC HTML Helper,获取当前局部视图的父视图
【发布时间】:2014-03-13 21:53:07
【问题描述】:

我正在编写一个 Html 扩展来动态呈现部分视图(视图名称/路径由 CMS 在运行时提供)。

在我的扩展中,我需要确定包含部分的最外层视图的名称或路径,以防一个视图包含一个部分包含另一个部分包含另一个部分-我需要了解父视图的身份。

在扩展方法中,我知道我可以通过 HtmlHelper.ViewDataContainer 属性获取直接父级。这告诉我当前正在执行的扩展的上下文。我需要做的是迭代到它的父视图(如果有的话)。

【问题讨论】:

  • 你为什么需要知道这个?
  • 因为我愿意。为什么要问?
  • 尝试了解您要做什么,以便我可以帮助您。 ...

标签: asp.net-mvc extension-methods asp.net-mvc-partialview


【解决方案1】:

如果你搜索controlleraction,你可以这样得到:

string action = html.ViewContext.RouteData.Values["action"].ToString();
string controller = html.ViewContext.RouteData.Values["controller"].ToString();
string url = "~/" + controller + "/" + action;

要获得即时视图(包括部分视图),是这样的:

var webPage = HtmlHelper.ViewDataContainer as WebPageBase;
var virtualPath = webPage.VirtualPath;

获取第一个视图路径(包含所有部分视图的主视图):

var viewPath = ((System.Web.Mvc.BuildManagerCompiledView)(htmlHelper.ViewContext.View)).ViewPath;

【讨论】:

  • 好的,谢谢,我在 OP 中提到我知道如何获取直接父级以及您所演示的控制器/操作。我试图了解的是包含最顶部部分的视图的名称,如果部分包含部分,则操作不会这样做,因为它可以根据情况调用许多不同的视图。
  • 我添加了一个新信息来获取第一个视图路径,而不是直接部分,而是控制器操作调用的视图。现在有了这个,您可以阅读视图内的文本,然后找到所有 Html.Partial("SomeName")。我能想象找到所有 partialView 的唯一方法是制作自己的 Html.Partial 或创建视图引擎 (codeproject.com/Articles/294297/…) 并创建自己的视图/PartialView 层次结构列表
  • 如果我知道你为什么需要这个值,这对我来说会更容易。如果它是为您的网络应用程序或您为其他项目创建插件。
  • 谢谢,你提取 ViewPath 的最后一点我认为现在可以工作,直到我们得到更复杂的嵌套部分。我认为您是对的,我正在查看自定义视图引擎。我需要视图名称 b/c 我们在单独的实用程序(如 CMS)中创建字符串资源,字符串的 id 是通过连接值所在的每个视图来构建的,例如ParentView_Partial1_Partial2_ResourceName_UniqueId
  • 如果对您有帮助,您能否将其标记为已回答:) 坦克
【解决方案2】:

我知道这个问题已经得到解答并且已经有一年多了,但是使用 ViewData 将视图名称从顶部向下传递到最远的嵌套局部视图是否可行?所以在 ParentView 你会做这样的事情:

@{
    ViewData["ResourcePath"] = "ParentView";
    Html.RenderPartial("Partial1", Model, ViewData);
}

然后在您的 Partial1 视图中:

@{
    ViewData["ResourcePath"] = ViewData["ResourcePath"] + "_Partial1";
    Html.RenderPartial("Partial2", Model, ViewData);
}

以此类推,直到达到需要获取字符串资源的级别。

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多