【问题标题】:Create multiple views and access with single action in controller在控制器中创建多个视图并使用单个操作进行访问
【发布时间】:2016-02-02 05:26:49
【问题描述】:

我将我的视图分隔在子文件夹下,我在控制器中只有一个操作方法,我在数据库中有我的视图名称,当我通过传递参数调用操作方法时(例如:id = 1),它将从数据库中获取视图名称并加载相应的视图。

public ActionResult Index(int FormId)
 {
   var getViews = db.fetchViews.where id = 1; //get views from db
   return view(getviews.viewName);
 }

这是我对解决方案的看法。

当我从操作方法调用视图时,它说找不到视图。

我不能像这样在 Action 方法中对子文件夹进行硬编码,

return View("~/Views/Form/Customer1/getviews.viewName");

任何想法都将不胜感激......

【问题讨论】:

  • 如果您要将所有视图直接移动到 Form 目录下,它将按预期工作,而无需对路径进行硬编码。
  • @TravisSchettler 但我必须将我的视图分成子文件夹,这就是座右铭。
  • 你能在db中设置查看完整路径吗?
  • 不,这是不可能的@Musthaan

标签: c# asp.net-mvc-5


【解决方案1】:

如果您无法将视图移动到 razor 视图引擎正在查找的目录中,您可以尝试以下操作:

public ActionResult Index(int FormId)
{
    var getViews = db.fetchViews.where id = 1; //get views from db
    var viewpath = string.Format("~/Views/Form/{0}/{0}", getviews.viewName);
    return View(viewpath);
}

或者,您可以创建一个自定义 RazorViewEngine 来搜索同名子目录中的视图。

这个post 有一种将搜索视图位置添加到剃刀视图引擎的方法,您的自定义搜索视图格式将是这样的:

new string[] 
{ 
    "~/Views/{1}/{0}/{0}.cshtml"
}

【讨论】:

  • 我不知道搜索视图的 RazorViewEngine,所以我可以有其他选择吗?
  • 我已经用一个 SO 帖子更新了我的答案,该帖子提供了一种将自定义视图位置添加到现有剃须刀视图引擎的方法。
  • 我没有使用此 Razor 引擎搜索,而是使用更简单的字符串格式方法...
【解决方案2】:

像这样?

public ActionResult Index(int FormId)
{
    var viewName = "~/Views/Form/Customer" + FormId + "/customer" + FormId;
    return View(viewName);
 }

【讨论】:

    【解决方案3】:

    如果您希望根据您的需要搜索视图,您可以继承 RazorViewEngine 并修改 Razor 将查看的路径。你可能会看到这个SO post

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      相关资源
      最近更新 更多