Tenho o seguinte layout para meu projeto mvc:
- / Controladores
- / Demo
- / Demo / DemoArea1Controller
- / Demo / DemoArea2Controller
- etc ...
- /Visualizações
- / Demo
- /Demo/DemoArea1/Index.aspx
- /Demo/DemoArea2/Index.aspx
No entanto, quando tenho isso para DemoArea1Controller
:
public class DemoArea1Controller : Controller
{
public ActionResult Index()
{
return View();
}
}
Recebo o erro "O 'índice' da visualização ou seu mestre não foi encontrado", com os locais de pesquisa usuais.
Como posso especificar os controladores na pesquisa de namespace "Demo" na subpasta de exibição "Demo"?
asp.net-mvc
views
Daniel Schaffer
fonte
fonte
Respostas:
Você pode facilmente estender o WebFormViewEngine para especificar todos os locais que deseja examinar:
Certifique-se de registrar o mecanismo de visualização, modificando o método Application_Start em seu Global.asax.cs
fonte
Agora no MVC 6 você pode implementar a
IViewLocationExpander
interface sem mexer com os motores de visualização:onde
{0}
é o nome da visualização de destino,{1}
- nome do controlador e{2}
- nome da área.Você pode retornar sua própria lista de locais, mesclá-la com o padrão
viewLocations
(.Union(viewLocations)
) ou apenas alterá-los (viewLocations.Select(path => "/AnotherPath" + path)
).Para registrar seu expansor de localização de visualização personalizada no MVC, adicione as próximas linhas ao
ConfigureServices
método noStartup.cs
arquivo:fonte
Na verdade, há um método muito mais fácil do que codificar os caminhos em seu construtor. Abaixo está um exemplo de extensão do mecanismo Razor para adicionar novos caminhos. Uma coisa que não tenho certeza é se os caminhos que você adicionar aqui serão armazenados em cache:
E seu Global.asax.cs
Uma coisa a ser observada: seu local personalizado precisará do arquivo ViewStart.cshtml em sua raiz.
fonte
Se você deseja apenas adicionar novos caminhos, pode adicionar aos mecanismos de visualização padrão e poupar algumas linhas de código:
O mesmo se aplica a
WebFormEngine
fonte
Em vez de subclassificar o RazorViewEngine, ou substituí-lo imediatamente, você pode apenas alterar a propriedade PartialViewLocationFormats existente do RazorViewEngine. Este código vai em Application_Start:
fonte
Da última vez que verifiquei, isso requer que você crie seu próprio ViewEngine. Não sei se eles tornaram mais fácil no RC1.
A abordagem básica que usei antes do primeiro RC foi, em meu próprio ViewEngine, dividir o namespace do controlador e procurar por pastas que correspondessem às partes.
EDITAR:
Voltei e encontrei o código. Aqui está a ideia geral.
fonte
Experimente algo assim:
fonte
Nota: para ASP.NET MVC 2, eles têm caminhos de localização adicionais que você precisará definir para visualizações em 'Áreas'.
A criação de um mecanismo de visualização para uma área é descrita no blog de Phil .
Nota: Este é para a versão prévia 1, portanto, está sujeito a alterações.
fonte
A maioria das respostas aqui, limpe os locais existentes chamando
ViewEngines.Engines.Clear()
e, em seguida, adicione-os novamente ... não há necessidade de fazer isso.Podemos simplesmente adicionar os novos locais aos existentes, conforme mostrado abaixo:
Agora você pode configurar seu projeto para usar o acima
RazorViewEngine
em Global.asax:Veja este tutorial para mais informações.
fonte