Save Field Auto [closed]

1

I have the following situation.

In the Bank, I have the tables State, City, with the data properly registered and linked.

In View I would like to put only a DropDown with the list of Cities, but I would like to automatically record the state id in the database.

namespace CadastroMVC.Models
{
    public class Class1
    {
        public int CidadeId { get; set; }
        public int EstadoId { get; set; }
        public string NomeCidade { get; set; }
    }
}
    
asked by anonymous 29.09.2016 / 20:04

2 answers

4

You need to select Estado again when saving:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Criar(Class1 class1)
    {
        if (ModelState.IsValid)
        {
            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                var estado = contexto.Cidades
                                     .Include(c => c.Estado)
                                     .FirstOrDefault(c => c.CidadeId == class1.CidadeId);

                // Verificar aqui se o estado existe, para evitar erros de referência nula.

                class1.EstadoId = estado.EstadoId; // Não é muito correto fazer isso, mas se você faz questão de salvar o EstadoId, tudo bem.
                context.Class1.Add(class1);
                await context.SaveChangesAsync();
                scope.Complete();
            }

            return RedirectToAction("Indice");
        }

        // ViewBags aqui
        return View(class1);
    }
    
29.09.2016 / 21:40
2

So I understand you want to keep the Id of the fixed state in your application.

Thinking about it, you just have to Create fill in the EstadoId with the desired value.

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Criar(Cidade cidade)
        {
            if (ModelState.IsValid)
            {
                //setando o estado
                cidade.EstadoId = 1;
                context.Cidades.Add(cidade);
                await context.SaveChangesAsync();

                return RedirectToAction("Indice");
            }

            await ViewBags();
            return View(cidade);
        }
    
29.09.2016 / 21:22