none
Roteamento de Views alocadas em subpastas. RRS feed

  • Pergunta

  • Boa noite pessoal.

    Estou criando um projetinho em ASP.NET MVC 4 e me deparei com um problema de organização das views, pois tenho a seguinte disposição:

    Views/Pasta/arquivo.cshtml

    Porém ao tentar dispor da seguinte forma:

    Views/Pasta/Pastab/index.cshtml

    Me é retornado o erro: "The view 'arquivo' or its master was not found or no view engine supports the searched locations. The following locations were searched:..."

    Pesquisei um pouco e pelo pouco que entendi tenho que criar uma rota na void  RegisterRoutes dentro do arquivo Global.asax.cs, porém não consigo entender o funcionamento dessas rotas ou se realmente é isso, pois das diversas tentativas nem uma teve resultado, dentre elas:

                routes.MapRoute("Teste", "Pasta/Pastab/{controller}/{action}/{id}", new { controller = "Pasta", action = "Index" });

    Minha dúvida é se é realmente pelo roteamento ou se existe algum outro método?

    segunda-feira, 21 de maio de 2012 21:28

Respostas

  • Encontrei:

    Basta colocar no return do Controller o endereço da página com subpastas:

    return View("Pastab/index");

    Outro jeito que encontrei para não precisar definir a pasta em todos os return é:

    Criar uma classe com as configurações de ViewEngine

    public class MyViewEngine : WebFormViewEngine
    {
       
    public MyViewEngine()
       
    {
           
    ViewLocationFormats = new[] {
               
    "~/{0}.aspx",
               
    "~/{0}.ascx",
               
    "~/Views/{1}/{0}.aspx",
               
    "~/Views/{1}/{0}.ascx",
               
    "~/Views/Shared/{0}.aspx",
               
    "~/Views/Shared/{0}.ascx",
           
    };

           
    MasterLocationFormats = new[] {
               
    "~/{0}.master",
               
    "~/Shared/{0}.master",
               
    "~/Views/{1}/{0}.master",
               
    "~/Views/Shared/{0}.master",
           
    };
           
    PartialViewLocationFormats = ViewLocationFormats;

       
    }
    }

    E chamar no Application Start do Global.asax:

    ViewEngines.Engines.Add(new MyViewEngine());

    Porém este segundo método deu alguns problemas, se alguém encontrar a resposta seria útil postar aqui para futuras consultas.

    terça-feira, 22 de maio de 2012 17:37