通过控制器中的单个操作创建多个视图和访问

时间:2016-02-02 05:26:50

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

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

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

这是我在解决方案中的观点。

enter image description here

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

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

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

任何想法都会受到赞赏......

3 个答案:

答案 0 :(得分:0)

喜欢这个吗?

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

答案 1 :(得分:0)

如果您无法将视图移动到剃刀视图引擎正在查找的目录,您可以尝试这样做:

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"
}

答案 2 :(得分:0)

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

相关问题