2014-10-07 2 views
2

Я реализовал mcfea ответ в нижней части этой записи, но он не работает.MVC 4 Показать места поиска

Adding sub-directory to "View/Shared" folder in ASP.Net MVC and calling the view

У меня есть вложенная в соображениях/Shared называется расписание.

Это исключение.

Вид «Расписание» или его хозяин не найден, или нет механизма просмотра поддерживает найденные местоположения. Следующие местоположения: искали: ~/Просмотры/Главная/Timesheet.aspx ~/Просмотры/Главная/Timesheet.ascx ~/Просмотры/Разделенный/Timesheet.aspx ~/Views/Shared/Timesheet.ascx ~/Просмотры/Главная /Timesheet.cshtml ~/Views/Home/Timesheet.vbhtml ~/Просмотров/Shared/Timesheet.cshtml ~/Views/Shared/Timesheet.vbhtml

Malcolm

public class MylesterViewEngine : RazorViewEngine 
{ 
    private static readonly string[] NewPartialViewFormats = 
{ 
    "~/Views/{1}/Timesheet/{0}.cshtml", 
    "~/Views/Shared/Timesheet/{0}.cshtml" 
}; 

    private static List<string> AreaRegistrations; 

    public MylesterViewEngine() 
    { 
     AreaRegistrations = new List<string>(); 

     BuildAreaRegistrations(); 

     base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray(); 
     base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(AreaRegistrations).ToArray(); 
    } 

    private static void BuildAreaRegistrations() 
    { 
     string[] areaNames = RouteTable.Routes.OfType<Route>() 
      .Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area")) 
      .Select(r => r.DataTokens["area"].ToString()).ToArray(); 

     foreach (string areaName in areaNames) 
     { 
      AreaRegistrations.Add("~/Areas/" + areaName + "/Views/Shared/Timesheet/{0}.cshtml"); 
      AreaRegistrations.Add("~/Areas/" + areaName + "/Views/{1}/Timesheet/{0}.cshtml"); 
     } 
    } 
} 

    protected void Application_Start() 
    { 
     //AreaRegistration.RegisterAllAreas(); 
     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AuthConfig.RegisterAuth(); 


     ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new MylesterViewEngine()); 

     //var unityContainer = ModelContainer.Instance; 
     //DependencyResolver.SetResolver(new UnityDependencyResolver(unityContainer)); 
     Bootstrapper.Initialise(); 

    } 

EDIT 2: Даже это не работает

protected void Application_Start() 
    { 
     //AreaRegistration.RegisterAllAreas(); 
     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AuthConfig.RegisterAuth(); 

     RazorViewEngine razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault(); 
     if (razorEngine != null) 
     { 
      string[] newPartialViewFormats = new[] { 
        "~/Views/{1}/Timesheet/{0}.cshtml", 
        "~/Views/Shared/Timesheet/{0}.cshtml" 
      }; 
      razorEngine.PartialViewLocationFormats = 
       razorEngine.PartialViewLocationFormats.Union(newPartialViewFormats).ToArray(); 
     } 

     //ViewEngines.Engines.Clear(); 
     //ViewEngines.Engines.Add(new MylesterViewEngine()); 

     //var unityContainer = ModelContainer.Instance; 
     //DependencyResolver.SetResolver(new UnityDependencyResolver(unityContainer)); 
     Bootstrapper.Initialise(); 

    } 

ответ

2

Ответ, на который вы ссылались, был специально для возврата частичных представлений, а не из основных видов. Поэтому код внутри него говорит что-то вроде этого:

string[] NewPartialViewFormats = 
{ 
    "~/Views/{1}/Timesheet/{0}.cshtml", 
    "~/Views/Shared/Timesheet/{0}.cshtml" 
}; 

base.PartialViewLocationFormats = 
    base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray(); 

Обратите внимание, что она использует PartialViewLocationFormats свойство. Если вы хотите использовать этот метод для всех представлений, вы должны также добавить свои форматы в ViewLocationFormats собственности:

string[] NewPartialViewFormats = 
{ 
    "~/Views/{1}/Timesheet/{0}.cshtml", 
    "~/Views/Shared/Timesheet/{0}.cshtml" 
}; 

//Add to partial views 
base.PartialViewLocationFormats = 
    base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray(); 

//Add to main views 
base.ViewLocationFormats = 
    base.ViewLocationFormats.Union(NewPartialViewFormats).ToArray(); 
+1

Спасибо, Дэвид, это была проблема. – Malcolm

0

Если вы проходите под вложенной папкой, вам необходимо пройти полный путь страницы cshtml. Если вы не хотите предоставлять полный путь, чем просто добавить страницу в общей папке.

+0

не вся точка связанного ответа, что он * не * нужно указать полный дорожка? – DavidG

+0

Зачем проголосовать за ответ, пожалуйста, укажите – Amit

+0

Возможно, потому что (как я и спросил) он не отвечает на вопрос? – DavidG

Смежные вопросы