Опубликовать только один контроллер, чтобы сделать это бритвы MVC - PullRequest
0 голосов
/ 19 декабря 2011

Добрый день .. Я использую @Html.action, чтобы перечислить пользователей каталога Acitve, сообщение, когда это происходит, проходит через два контроллера, контроллер для нового пользователя и контроллер, который составляет список пользователей, у вас естькакой-то способ сделать пост происходит только в контроллере New User?Я пытался использовать @Html.BeginForm ("New", "Users")) , но безуспешно .. если у вас есть какой-либо способ решить это??

Это мой код и новый пользователь

  [HttpPost]
    public ActionResult Novo(NovoViewModel novoViewModel)
    {



        //Validações de autenticação
        if (_authenticationService.IsUserRegistered(novoViewModel.NomeUsuario))
        {
            ModelState.AddModelError("ExistingUsername", String.Format(ViewModelValidations.ExistingUsername, "Usuário"));
        }

        if (_usuarioRepository.ObtemPorEmail(novoViewModel.Email) != null)
        {
            ModelState.AddModelError("ExistingEmail", String.Format(ViewModelValidations.ExistingEmail, "Email"));
        }

        if (ModelState.IsValid)
        {
            IList<Perfil> perfisSelecionados = new List<Perfil>();
            novoViewModel.PerfisSelecionados.ToList().Select(x => _perfilRepository.ObterPorId(x)).ToList().
                ForEach(perfisSelecionados.Add);

            Usuario usuario = new Usuario()
                                  {
                                      Nome = novoViewModel.Nome,
                                      Email = novoViewModel.Email,
                                      Telefone = novoViewModel.Telefone,
                                      DataNascimento = Convert.ToDateTime(novoViewModel.DataNascimento),
                                      Sexo =
                                          !String.IsNullOrEmpty(novoViewModel.SexoSelecionado)
                                              ? (Sexo?)(Convert.ToByte(novoViewModel.SexoSelecionado))
                                              : null,
                                      Credencial = new Credencial()
                                                       {
                                                           NomeUsuario = novoViewModel.NomeUsuario,

                                                           Status =
                                                               (Status)
                                                               Convert.ToByte(novoViewModel.StatusSelecionado),
                                                           Perfis = perfisSelecionados
                                                       }
                                  };

            _usuarioRepository.Adicionar(usuario);

            _dbContext.SaveChanges();

            return RedirectToAction("Index");
        }

        novoViewModel.Sexos = GetSexos();
        novoViewModel.Status = GetStatus();
        novoViewModel.Perfis = GetPerfis();

        return View(novoViewModel);


    }

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

@Html.BeginForm("New", "Users")) опубликует действие New в контроллере Users. если вы хотите отправлять сообщения на контроллер NewUser, вы должны иметь вместо этого:

@Html.BeginForm("ActionName", "NewUsers"))
0 голосов
/ 19 декабря 2011

У вас есть код

if (ModelState.IsValid)
{
   ......
   ......

   return RedirectToAction("Index");
}

Это означает, что когда POST проходит через действие NewUser и информация действительна, он перенаправляется на действие индекса (RedirectToAction("Index")).Когда браузер получает команду перенаправления, он автоматически выводит новый запрос на действие Index.И этот второй, тихий и автоматический запрос может заставить вас думать, что POST для NewUser также проходит через действие Index.На самом деле это не так.Это просто еще один свежий запрос, вызванный return RedirectToAction("Index");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...