ASP.NET MVC: Título da página dinâmica
-
20-09-2019 - |
Pergunta
No WebForms, eu sempre usava minha página principal para definir títulos de página e meta -descrição com base no URL atual. Eu estava pensando em fazer o mesmo para meus projetos de MVC do ASP.NET, mas não tenho certeza por onde começar. Seria bom poder definir o título/descrição com base no controlador e/ou ação com alguns valores padrão, caso eu não especifique nenhuma informação. A razão pela qual faço isso é porque eu gosto que tudo esteja em um só lugar, porque isso facilita a identificação de erros.
Editar:
Depois de ler as respostas e pesquisar algumas, eu estava pensando que poderia ser legal obter as informações de um arquivo XML. Com XML parecendo algo assim:
<website title="default title for webpage">
<controller name="HomeController" title="Default title for home controller">
<action name="Index" title="title for index action" />
</controller>
</website>
Eu sou novo no ASP.NET MVC, então não tenho certeza de onde inicializar isso.
Solução 3
Então, depois de alguns dias de tentativa, acabei fazendo um filtro personalizado que lê a partir de um arquivo XML.
Eu adicionei o código para copyPastecode.com
http://www.copypastecode.com/9797/
http://www.copypastecode.com/9809/
http://www.copypastecode.com/9805/
Eu sou muito iniciante no ASP.NET MVC e codificação "real" C#, por isso, se você vir coisas estranhas, por favor me perdoe. Se alguém quiser otimizá -lo ou tiver uma solução melhor, sinta -se à vontade para publicá -lo como uma resposta.
A próxima coisa que vou tentar é fazer isso sem um filtro para que seja ativado em todos os controladores. Não tenho certeza de onde conectar a lógica. Então, se alguém pode me empurrar para a direção certa, me avise.
Outras dicas
Eu sugiro a seguinte estratégia:
Crie uma hierarquia de modelos:
abstract class MasterModel
{
public string PageTitle { get; set; }
}
abstract class HomeBaseModel : MasterModel
{
PageTitle = "Home";
}
abstract class UsersBaseModel : MasterModel
{
PageTitle = "Users";
}
/************************************/
class HomeNewsModel : HomeBaseModel
{
PageTitle = "News";
}
class UsersProfileModel : UsersBaseModel
{
PageTitle = "Profile";
}
Você define um modelo mestre para manter o título da página e cria modelos básicos para manter títulos padrão para um controlador. Dessa forma, você pode definir o título em cada ação explicitamente ou deixá -lo de fora para que o título padrão para este controlador seja usado.
Então, em sua visão mestre, você apenas escreve uma vez:
<title><%= Model.PageTitle %></title>
E está feito.
Você pode simplesmente extrair esses dados do modelo da página mestre e deixar esse modelo ter alguns padrões razoáveis.