Tengo un formulario básico para que quiero manejar botones en el formulario llamando al ActionResult método en la Vista asociada Controller clase. Aquí está el siguiente código HTML5 para el formulario:

<h2>Welcome</h2>

<div>

    <h3>Login</h3>

    <form method="post" action= <!-- what goes here --> >
        Username: <input type="text" name="username" /> <br />
        Password: <input type="text" name="password" /> <br />
        <input type="submit" value="Login">
        <input type="submit" value="Create Account"/>
    </form>

</div>

<!-- more code ... -->

La correspondiente Controller código es el siguiente:

[HttpPost]
public ActionResult MyAction(string input, FormCollection collection)
{
    switch (input)
    {
        case "Login":
            //do some stuff...
            break;
        case "Create Account"
            //do some other stuff...
            break;
    }

    return View();
}
InformationsquelleAutor dtg | 2013-03-03

2 Comentarios

  1. 67

    que hacen que el uso de la ayuda HTML y han

        @using(Html.BeginForm())
        {
            Username: <input type="text" name="username" /> <br />
            Password: <input type="text" name="password" /> <br />
            <input type="submit" value="Login">
            <input type="submit" value="Create Account"/>
        }

    o utilizar la dirección Url helper

    <form method="post" action="@Url.Action("MyAction", "MyController")" >

    Html.BeginForm tiene varios (13), se invalida donde se puede especificar más de información, por ejemplo, un uso normal cuando la carga de archivos es mediante:

    @using(Html.BeginForm("myaction", "mycontroller", FormMethod.Post, new {enctype = "multipart/form-data"}))
    {
        < ... >
    }

    Si no se especifica ningún argumento, el Html.BeginForm() creará un POST forma que puntos de su controlador y la acción actual. Como un ejemplo, digamos que usted tiene un controlador llamado Posts y una acción llamada Delete

    public ActionResult Delete(int id)
    {
       var model = db.GetPostById(id);
       return View(model);
    }
    
    [HttpPost]
    public ActionResult Delete(int id)
    {
        var model = db.GetPostById(id);
        if(model != null) 
            db.DeletePost(id);
    
        return RedirectToView("Index");
    }

    y la página html sería algo así como:

    <h2>Are you sure you want to delete?</h2>
    <p>The Post named <strong>@Model.Title</strong> will be deleted.</p>
    
    @using(Html.BeginForm())
    {
        <input type="submit" class="btn btn-danger" value="Delete Post"/>
        <text>or</text>
        @Url.ActionLink("go to list", "Index")
    }
    • He intentado el método 2 con el URL helper, pero creo que la sintaxis que encontré fue MVC3 específicos y no funcionó. Este uno más adecuado a mis necesidades perfectamente. Gracias!
    • Porque no hace falta ) soporte en Html.BeginForm línea.
    • ¿Cómo tienes tanto public ActionResult Delete(int id) y [HttpPost] public ActionResult Delete(int id)? No hay un nombre de colisión entre los dos?
    • Gracias por un muy completa respuesta explicando común sobrecargas 🙂
    • el [HttpPost] sobre el resultado de la acción de afeitar permite saber que el actionresult es el especificado para el post. por lo que se sabe cual tomar dependiendo del método utilizado para llamar
  2. 0

    Aquí estoy, básicamente, la inclusión de un botón en un enlace. La ventaja es que usted puede enviar a los diferentes métodos de acción en el mismo formulario.

    <a href="Controller/ActionMethod">
        <input type="button" value="Click Me" />
    </a>

    Agregar parámetros:

    <a href="Controller/ActionMethod?userName=ted">
        <input type="button" value="Click Me" />
    </a>

    La adición de parámetros a partir de una no enumerados Modelo:

    <a href="Controller/[email protected]">
        <input type="button" value="Click Me" />
    </a>

    Usted puede hacer lo mismo para un enumerados Modelo demasiado. Usted sólo tiene que hacer referencia a una sola entidad primera. Feliz Codificación!

Dejar respuesta

Please enter your comment!
Please enter your name here