none
Error de servidor en la aplicación '/' RRS feed

  • Pregunta

  • Buen día, podrian ayudarme por favor.

    estoy empezando con MVC en ASP.NET y Entity Framework, mi primer aplicación fue mostrar los datos de una tabla especifica y me salio muy bien, utilice una vista fuertemente tipada y la scaffold template que utilice fue la opcion list.

    ahora bien, cuando muestro los datos, tengo un link que me da la opcion de agregar nuevos datos a mi tabla, la quise programar agregando el controller Create y una vista fuertemente tipada hacia la tabla Login utilizando la scaffold template: create, pero no me resulto, me da el siguiente error:

    Les dejo el link que me aparece en la pagina que muestro los datos de mi tabla:

     @Html.ActionLink("Agregar un nuevo elemento", "Create")

    aquí mi controlador con las accion de mostrar e ingresar(esta no funciona, lo raro es que si quito [HttpPost] si me muestra la vista, no agrega datos igualmente)

    using MvcApplication1.Models;

    namespace MvcApplication1.Controllers
    {
        public class EjemploController : Controller
        {
            DatosLoginWC datos = new DatosLoginWC();
            public ActionResult Mostrar()
            {
               return View(datos.Login.ToList());
            }

            [HttpPost]
            public ActionResult Create(Login info)
            {
                try
                {
                   datos.Login.Add(info);
                   datos.SaveChanges();
                   return RedirectToAction("Mostrar");
                   
                }
                catch (Exception)
                {
                    return View();
                }
                
            }
        }}

    y mi archivo global.asax

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Ejemplo", action = "Mostrar", id = UrlParameter.Optional } // Parameter defaults
                );


    pabletoreto



    lunes, 17 de marzo de 2014 16:34

Respuestas

  • ya te respondieron, pero te aclaro

     public ActionResult Create()
            {
               return View();
            }

           
            [HttpPost]
            public ActionResult Create(Login info)
            {
                try
                {
                    datos.Login.Add(info);
                    datos.SaveChanges();
                    return RedirectToAction("Mostrar");
                }
                catch (Exception)
                {
                    return RedirectToAction("Error");
                }
            }

    • Marcado como respuesta pabletoreto martes, 18 de marzo de 2014 5:46
    martes, 18 de marzo de 2014 1:55

Todas las respuestas

  • hola

    pero porque defines el action Create() como post si el link accedera como get

    demas no veo que le asignes ningun parametros

    porque no solo defines

    public ActionResult Create()

       //resto codigo

    }

    y veras que si pones un breakpoint seguro ingresa

    slaudos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 17 de marzo de 2014 17:20
  • hola

    pero porque defines el action Create() como post si el link accedera como get

    demas no veo que le asignes ningun parametros

    porque no solo defines

    public ActionResult Create()

       //resto codigo

    }

    y veras que si pones un breakpoint seguro ingresa

    slaudos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Hola, siempre agradezco tu ayuda Leandro pero esta vez disculpa que no te entiendo o no me explique bien.

    utilizo el HttpPost porque envió datos desde la vista Create al controlador Create y por eso también mi controlador recibe datos: public ActionResult Create(Login info) que según un tutorial que sigo en internet, debía escribir [HttpPost] para poder capturar los datos que se le envíen al controlador.

    desde mi vista Create.cshtml tengo para el boton submit:  <input type="submit" value="Create" /> 

    estoy empezando a lo mejor algo trivial hice mal pero en mi cabeza no lo veo, mi controller create lo cambie a esto y ahora resulta que siempre me manda a la vista Error

     [HttpPost]
            public ActionResult Create(Login info)
            {
                try
                {
                    datos.Login.Add(info);
                    datos.SaveChanges();
                    return RedirectToAction("Mostrar");
                   

                }
                catch (Exception)
                {
                    return RedirectToAction("Error");
                }
                
            }


    pabletoreto

    lunes, 17 de marzo de 2014 17:33
  • ya te respondieron, pero te aclaro

     public ActionResult Create()
            {
               return View();
            }

           
            [HttpPost]
            public ActionResult Create(Login info)
            {
                try
                {
                    datos.Login.Add(info);
                    datos.SaveChanges();
                    return RedirectToAction("Mostrar");
                }
                catch (Exception)
                {
                    return RedirectToAction("Error");
                }
            }

    • Marcado como respuesta pabletoreto martes, 18 de marzo de 2014 5:46
    martes, 18 de marzo de 2014 1:55
  • hola

    pero desde un Html.ActionLink no envias nada por POST, es un GET lo que realiza

    deerias definir un Html.BeginForm() y realiza un submit del form a ese action para que funcione

    @using(HtmlBeginForm("Create", FormMethod.Post)){

       //resto del codigo

       <button type="submit" >Aceptar</button>

    }

    con eso si envias por post a ese action

    con un actionlink no lo haces

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 18 de marzo de 2014 3:34
  • mi controller create lo cambie a esto y ahora resulta que siempre me manda a la vista Error

    si pones un breakpoint puede evaluar cual es el exception que se genera ?

    definir esto

    catch (Exception)

    sin mostrar el mensaje del error o loguearlo, es una pesima idea, porque nunca te enteras porque falla

    cuando redireccionas al Error deberias enviar tambien el mensaje del error

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 18 de marzo de 2014 3:37