【问题标题】:Custom tokens in view engine?视图引擎中的自定义令牌?
【发布时间】:2010-06-22 13:22:45
【问题描述】:

在 ASP.NET MVC 2 项目中,我该如何编写一个自定义视图引擎,允许在搜索视图时使用自定义标记?

具体来说,我正在努力实现这一目标:

在 PagesController 中:

public ActionResult ViewPage(string folder, string page)
{
  return View(folder, page);
}

我想让视图引擎在目录中搜索视图:/Views/Pages/[folder]/

在不提前知道文件夹名称的情况下如何实现这一点?理想情况下,这个定制的视图引擎只能用于这个单一的控制器。

【问题讨论】:

    标签: asp.net-mvc viewengine token


    【解决方案1】:

    您无需实现自己的视图引擎即可解决此问题。您可以简单地提供所需视图的路径。像这样的:

    return View("~/Views/Pages/FolderName/ViewName.aspx");
    

    您的示例可能如下所示:

    public ActionResult ViewPage(string folder, string page) {
        return View(string.Format("~/Views/Pages/{0}/{1}.aspx", folder, page));
    }
    

    【讨论】:

    • 是的,我意识到我可以做到这一点,事实上,这就是我现在正在做的事情。如果可能的话,我希望能够使用视图引擎。
    • @Brian Vallelunga,你为什么要这样做?能够像这样传递视图的位置是视图引擎的一个特性。为什么要复制它?这很可能会导致代码难以维护。
    • 我猜你在这种情况下是对的。例如,您没有得到的是自动 404 检查。当然,这很容易添加。
    • @Brian Vallelunga,您将获得与在视图引擎中编写此代码相同的功能。您在这里所做的只是覆盖默认视图位置。所以在那之后也会发生同样的事情。未找到视图时不会出现 404 异常。你会从框架中得到一个异常。
    【解决方案2】:

    如果这些值因请求而改变(...看起来像那样),那么您需要覆盖 CreateView。我自己没有做过,但在一个关于 SO 的问题中有人说它可能:

    Localization with separate Language folders within Views

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2015-02-12
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多