2016-10-25 47 views
2

子工作在出价,以保持我的意见我的新的MVC应用5内举办,我已经建立了一个文件夹结构如下:在自定义视图引擎

Views 
|-- Account 
| |-- Partials 
|  |-- EditUser.cshtml 
|  |-- ListUsers.cshtml 
| |-- Home.cshtml 
| 
|-- Admin 
    |-- Partials 
     |-- AnotherPartialView.cshtml 

现在,我想为此实现自定义视图引擎,因此我不必在主视图文件夹中指定Partials文件夹的完整路径。

我创建了一个自定义视图引擎是这样的:

public class CustomViewEngine : RazorViewEngine 
{ 
    public CustomViewEngine() 
     : base() 
    { 

     var viewLocations = new[] { 
      "~/Views/{1}/{0}.cshtml", 
      "~/Views/Shared/{0}.cshtml", 
      "~/Views/{1}/Partials/{0}.cshtml" 

     }; 

     this.PartialViewLocationFormats = viewLocations; 
     this.ViewLocationFormats = viewLocations; 


    } 
} 

并将其注册在Application_Start()在Global.asax中

protected void Application_Start() 
{ 
    /* snip */ 
    ViewEngines.Engines.Add(new CustomViewEngine()); 
} 

编辑:

我称之为局部像这样的意见:

[HttpGet] 
/// http://localhost/Account/ListUsers 
/// View is located in ~/Views/Account/Partials/ListUsers.cshtml 
public ActionResult ListUsers() 
{ 
    /* populate model */ 

    return PartialView("ListUsers.cshtml", Model); 
} 

我的想法是,如果我在视图位置中包含控制器参数{1}后跟Partials文件夹,这将使我无法将每个Partials子文件夹作为位置。这也意味着我只能通过名称而不是完整路径来引用视图。

但是,我仍然收到在任何搜索位置找不到部分视图的错误。

任何帮助,将不胜感激。

谢谢!

+0

你可以显示你想如何呈现的局部视图的例子吗?因为我已经在测试项目中复制了你的代码,并且它对我来说似乎工作正常。 另外,您在此处共享的视图引擎类称为“CustomViewEngine”,但您将“IridiumViewEngine”添加到引擎。这是你的实际代码还是粘贴时出错? – TKharaishvili

+0

@GwynBleidd糟糕,是'IridiumViewEngine'在复制/粘贴过程中出错。我已经用我的部分视图返回的方式更新了我的帖子。谢谢! – Dave

回答

1

我认为指定.chstml扩展的问题,尽量不将其返回的观点:

return PartialView("ListUsers", Model); 
+0

哇,我真不敢相信我没有接受。现在感觉很愚蠢。 :$非常感谢! – Dave

+0

@Dave碰巧对我们所有人,没有biggie :) – TKharaishvili