只发布一个控制器来做这个mvc剃刀

时间:2011-12-19 10:03:30

标签: asp.net-mvc asp.net-mvc-3 razor

美好的一天.. 我正在使用@Html.action列出Acitve目录的用户,Post发生时它通过两个控制器,新用户的控制器,以及制作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 个答案:

答案 0 :(得分:1)

@Html.BeginForm("New", "Users"))将发布到Users控制器中的新操作。如果你想发布到NewUser控制器,你应该改为:

@Html.BeginForm("ActionName", "NewUsers"))

答案 1 :(得分:0)

你有代码

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

   return RedirectToAction("Index");
}

这意味着,当POST通过NewUser操作并且信息有效时,它会重定向到索引操作(RedirectToAction("Index"))。当浏览器收到重定向命令时,它默默地自动向Index操作发出所有新的新请求。而第二个,静默和自动请求可能会导致您认为POST到NewUser也会通过Index操作。事实上,它没有。这只是由return RedirectToAction("Index");

引起的另一个新请求