87
5.4. Cadê meu médico: CRUDs
Casa do Código
Use a layout master page: essa opção deve ser selecionada para criar uma view que utilize a Master Page já definida anteriormente.
A figura 5.5 representa esse processo. Todas as views criadas no aplicativo a partir de agora seguirão este template, onde alteraremos somente as propriedades de model class e Scaffold template.
Figura 5.5: Adicionando uma nova View
Após clicar no botão Add,
o Visual Studio criará e automaticamente abrirá a view para edição. A listagem 5 apresenta o código gerado para a view Index.
O próximo capítulo será dedicado integralmente à apresentação de detalhes
relacionados às views e à sua engine padrão o ASP.NET Razor. Não se preocupe 88
Casa do Código
Capítulo 5. Controllers: Adicionando comportamento a nossa aplicação
agora com as particularidades do Razor mencionadas, faremos poucas alterações só para ter um cadastro em pleno funcionamento.
Listagem 5.5 - Código padrão gerado pelo MVC pra a view:
@model IEnumerable<CadeMeuMedico.Models.Medico>
@{
ViewBag.Title = %%Index%%;
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.IDMedico)
</th>
<th>
@Html.DisplayNameFor(model => model.CRM)
</th>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.Endereco)
</th>
<th>
@Html.DisplayNameFor(model => model.Bairro)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th>
@Html.DisplayNameFor(model => model.AtendePorConvenio)
</th>
<th>
@Html.DisplayNameFor(model => model.TemClinica)
89
5.4. Cadê meu médico: CRUDs
Casa do Código
</th>
<th>
@Html.DisplayNameFor(model => model.WebsiteBlog)
</th>
<th>
@Html.DisplayNameFor(model => model.IDCidade)
</th>
<th>
@Html.DisplayNameFor(model => model.IDEspecialidade)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.IDMedico)
</td>
<td>
@Html.DisplayFor(modelItem => item.CRM)
</td>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Endereco)
</td>
<td>
@Html.DisplayFor(modelItem => item.Bairro)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.AtendePorConvenio)
</td>
<td>
@Html.DisplayFor(modelItem => item.TemClinica)
</td>
<td>
@Html.DisplayFor(modelItem => item.WebsiteBlog)
90
Casa do Código
Capítulo 5. Controllers: Adicionando comportamento a nossa aplicação
</td>
<td>
@Html.DisplayFor(modelItem => item.IDCidade)
</td>
<td>
@Html.DisplayFor(modelItem => item.IDEspecialidade)
</td>
<td>
@Html.ActionLink("Edit", "Edit",
new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details",
new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete",
new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
</table>
Por padrão, o scaffold do MVC cria uma tabela com uma coluna para cada pro-
priedade do modelo, nesse caso, temos um grid que irá mostrar todos os dados dos médicos. No caso da aplicação Cadê meu Médico, os dados que deveremos mostrar
no grid devem ser apenas: Nome, Cidade e Especialidade.
Modifique o código da view Index removendo as colunas desnecessárias, man-
tendo somente as colunas para Nome, Cidade e Especialidade. A listagem 6 apre-
senta o código esperado. Repare também que, nas colunas Cidade e Especialidade, modificamos o valor apresentado. Originalmente o scaffold adicionou as propriedades IDEspecialidade e IDCidade, o que para o usuário não faz sentido para ele a informação necessária é o nome referente a essas informações.
Na listagem 4 utilizamos o recurso .Include() do EntityFramework para
carregar
os relacionamentos do modelo, com isso fica fácil navegar entre os relacionamentos do modelo e apresentar outras informações ao usuário.
Listagem 5.6 - Listagem de médicos mostrando só os dados necessários:
@model IEnumerable<CadeMeuMedico.Models.Medico>
@{
ViewBag.Title = %%Index%%;
91
5.4. Cadê meu médico: CRUDs
Casa do Código
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.IDCidade)
</th>
<th>
@Html.DisplayNameFor(model => model.IDEspecialidade)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Cidade.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.Especialidade.Nome)
</td>
<td>
@Html.ActionLink("Edit", "Edit",
new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details",
new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete",
new { /* id=item.PrimaryKey */ })
</td>
</tr>
92
Casa do Código
Capítulo 5. Controllers: Adicionando comportamento a nossa aplicação
}
</table>
Antes de compilar o projeto com o objetivo de testar o funcionamento da view,