</div>
<div class="editor-label">
@Html.LabelFor(model => model.Endereco)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Endereco)
@Html.ValidationMessageFor(model => model.Endereco)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Bairro)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Bairro)
@Html.ValidationMessageFor(model => model.Bairro)
</div>
96
Casa do Código
Capítulo 5. Controllers: Adicionando comportamento a nossa aplicação
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.AtendePorConvenio)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AtendePorConvenio)
@Html.ValidationMessageFor(model =>
model.AtendePorConvenio)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.TemClinica)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TemClinica)
@Html.ValidationMessageFor(model
=> model.TemClinica)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.WebsiteBlog)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.WebsiteBlog)
@Html.ValidationMessageFor(model => model.WebsiteBlog)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IDCidade)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IDCidade)
@Html.ValidationMessageFor(model => model.IDCidade)
</div>
97
5.4. Cadê meu médico: CRUDs
Casa do Código
<div class="editor-label">
@Html.LabelFor(model => model.IDEspecialidade)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IDEspecialidade)
@Html.ValidationMessageFor(model => model.IDEspecialidade)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", %%Index%%)
</div>
Analisando o código recém-criado, é possível notar que o formulário apresenta
um campo chamado IDMedico para preenchimento. Veja, este campo refere-se
a um identity no banco de dados, ou seja, este valor será gerado automaticamente pelo GBD (Gerenciador de Banco de Dados) quando chegar a requisição de
gravação. Assim, faremos uma pequena alteração no HTML gerado para endereçar
este problema. Removeremos da view todo o código referente a esse campo no
formulário. A listagem 10 apresenta o trecho de código que deverá ser removido.
Listagem 5.10 - Código que deve ser removido:
<div class="editor-label">
@Html.LabelFor(model => model.IDMedico)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IDMedico)
@Html.ValidationMessageFor(model => model.IDMedico)
</div>
Faremos ainda outra pequena alteração no HTML gerado.
Utiliza-
remos as propriedades da
ViewBag
para criar os Combos de nossa
tela.
Altere a linha
@Html.EditorFor(model => model.IDCidade)
para
@Html.DropDownList("IDCidade", String.Empty),
e
a
li-
98
Casa do Código
Capítulo 5. Controllers: Adicionando comportamento a nossa aplicação
nha
@Html.EditorFor(model => model.IDEspecialidade)
para
@Html.DropDownList("IDEspecialidade", String.Empty).
Pronto. Agora que possuímos o fomulário pronto e funcionando, precisamos
gravar os dados provenientes dele no banco de dados. Para isso, é preciso criar a action que receberá um model já com os dados que o usuário preencheu utilizando o formulário da view. Primeiro, é necessário compreender os verbos GET e POST do do protocolo HTTP. Apesar de mais verbos estarem disponíveis no HTTP (DELETE,
OPTIONS, entre outros), para a nossa aplicação de exemplo utilizaremos apenas GET
e POST.
Em linhas gerais, o verbo GET é utilizado para obter um recurso do servidor,
enquanto o verbo POST serve para adicionar um novo recurso. Por recurso, entenda páginas, imagens, estilos, scripts, dados etc.
A listagem 11 demostra o código da action que receberá, em um parâmetro,
o model preenchido pelo usuário na view. Além de validar o modelo e adicionar
no banco de dados se nenhuma inconsistência for encontrada, note que a action
também possui o nome Adicionar, entretanto, encontra-se decorada com o
atributo HttpPost. Desta forma, pelo atributo decorativo da Action, o ASP.NET
MVC consegue diferenciar os métodos com mesmo nome.
Listagem 5.11 - Action com atributo HttpPost:
public ActionResult Adicionar()
{
ViewBag.IDCidade = new SelectList(db.Cidades, "IDCidade", "Nome"); ViewBag.IDEspecialidade = new SelectList(db.Especialidades,
"IDEspecialidade",
"Nome");
return View();
}
[HttpPost]
public ActionResult Adicionar(Medico medico)
{
if (ModelState.IsValid)
{
db.Medicos.Add(medico);
db.SaveChanges();
return RedirectToAction(%%Index%%);
}
99
5.4. Cadê meu médico: CRUDs
Casa do Código
ViewBag.IDCidade = new SelectList(db.Cidades, "IDCidade",
"Nome",
medico.IDCidade);
ViewBag.IDEspecialidade = new SelectList(db.Especialidades,