none
Rota RRS feed

  • Pergunta

  • Galera estou colocando na minha rota para meu sistema apontar para a controller "cadastro" e a ação "Create", porem depois que submeto a pagina para gravar no banco de dados, ele me retorna o erro. O que estou fazendo de errado ?

    Segue a imagem da rota e o erro:

    Erro:


    SirSmart

    segunda-feira, 31 de março de 2014 20:29

Todas as Respostas

  • Ai está certo, mostre a View onde tem o botão que chama essa Action. 

    E sua controller. 

    Verifique se existe alguma notação do tipo HttpPost tipo assim:

    // Action chamada no carregamento da minha View

    [HttpGet] public ActionResult CadastroPerfilUsuario() { return View(); }

    // Minha ActionChamada pelo Botao [HttpPost] public ActionResult CadastroPerfilUsuario(CadastroPerfil model, string usuario) { return View(); }

    Lembrando que na view onde se encontra o seu botaõ deve ter esse código:

     @using (Html.BeginForm("Action", "Controller", FormMethod.Post))
    {
       // Conteudo da sua View a ser postada
    
       // Botao que irá posta a view
    
    
    }

    Espero que ajude. 

    Abraço.



    segunda-feira, 31 de março de 2014 20:32
  • Minha View está assim :

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
        Create
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <form name="formCadastro" action="Create" method="post">
        <h2>
            Criar novo Contato</h2>
        <p>
            <span>Nome</span><input type="text" name = "txtNome" id="txtNome" /></p>
        <p>
            <span>E-mail</span><input type="text" name = "txtEmail"  id="txtEmail" /></p>
        <p>
            <span>Telefone</span><input type="text" id="txtTelefone" name = "txtTelefone"  /></p>
        <p>
            <input type="submit" value="Salvar" /></p>
        </form>
    </asp:Content>

    E minha controller assim:

     [HttpPost]
            public ActionResult Create(FormCollection collection)
            {
                try
                {
    
                    using (var bd = new bdEntities())
                    {
    
    
                        var pessoa = new Pessoa();
    
                        pessoa.Email = collection["txtEmail"];
                        pessoa.Nome = collection["txtNome"];
                        pessoa.Telefone = collection["txtTelefone"];
    
                        bd.AddToPessoa(pessoa);
                        bd.SaveChanges();
                    }
    
    
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }

    Como posso resolver ?

    Obrigado


    SirSmart

    segunda-feira, 31 de março de 2014 21:32
  • Você colocou algum breakpoint na sua action Create (HttpPost) pra verificar se ela está sendo chamada quando ocorre o submit?


    Renato Person | MCPD

    quarta-feira, 2 de abril de 2014 20:24
  • Está faltando o "GET" para a sua action create (sem o [HttpPost]):

    public ActionResult Create()

    quinta-feira, 3 de abril de 2014 01:49
    Moderador
  • SirSmart, eu acharia legal você criar uma rota acima da Default e deixar a Default como estava, isso seria uma boa prática!!! (claro isso é um alerta)

    Eu olhei seu código da View ele não ta apontando para Controller e Action Correto ele só está apontando para Action:

    <form name="formCadastro" action="Create" method="post">

    o certo seria

    <form name="formCadastro" action="/Cadastro/Create" method="post">

    utilize assim para criar o form com o helper

    @using (Html.BeginForm("Create", "Cadastro", FormMethod.Post))

    (Igual demostrado pelo Fernando Mamprin)

    Tem exemplos ótimos na internet de criação de rotas no MVC

    https://www.youtube.com/watch?v=23hhkvRIXHs


    Fulvio Cezar Canducci Dias

    quinta-feira, 3 de abril de 2014 02:04