Saltar al contenido

Use esta guía de ASP.NET MVC para crear páginas HTML

Al igual que el primer método, este enfoque sigue utilizando múltiples etiquetas de type=»submit», con el mismo atributo de $0027nombre$0027 y diferentes atributos de $0027valor$0027.

Añade atributos adicionales a la etiqueta que se implementan en el HML5; formaction y formmethod.

Use esta guía de ASP.NET MVC para crear páginas HTML
Use esta guía de ASP.NET MVC para crear páginas HTML

Cada botón invoca una acción de controlador distinta a la acción de controlador predeterminada para la página.

Razor View (.cshtml)

De manera similar a la primera técnica, este enfoque utiliza múltiples etiquetas con el mismo nombre de atributos de valores y diferentes valores (texto) para el atributo de valor. También agrega dos atributos que fueron implementados en HTML5:

  • Formacción – Especifica la acción que se debe realizar cuando se presiona el botón.
  • formmethod – Especifica si se trata de una acción HttpPost o HttpGet.

El valor del atributo formaction es el nombre de la acción del controlador que se llamará al pulsar el botón, ya sea «TermsAccept» o «TermsDecline» en el ejemplo. Consulte la sección Acción de formulario a continuación para obtener una explicación de por qué es una buena idea utilizar el método Razor @Url.Action() para suministrar la URL.

El valor de formmethod debe ser «post» para HttpPost.

El valor (texto) del atributo de valor proporciona el texto del botón, como en la primera técnica.

12<input type="submit" name="response" value="Accept" [email protected]("TermsAccept") formmethod="post" btn-primary" /><input type="submit" name="response" value="Decline" [email protected]("TermsDecline") formmethod="post" btn-default" />

html

Como en la primera técnica, el estilo Bootstrap es opcional.

Acciones del controlador Coincidencia de valores de atributo de formacción

El uso del atributo de formacción HTML5 proporciona la capacidad de crear acciones de controlador separadas para cada botón. Cada uno de los botones de envío que se muestran arriba tiene una acción de controlador que corresponde al valor de la acción de formulario.

No se necesita un parámetro para el atributo de valor de los botones creados en la página con las etiquetas.

12345678910111213141516171819202122[HttpPost][ValidateAntiForgeryToken]publicActionResultTermsAccept([Bind(Include ="UserID,Username")]User user){if(ModelState.IsValid){ user.TermsAcceptedOn = DateTime.Now; user. TermsStatus ="Accepted";}returnView("Index", usuario);}[HttpPost][ValidateAntiForgeryToken]publicActionResultadoTérminosDeclinar([Bind(Include ="UserID,Username")]Usuario usuario){if(ModelState.IsValid){ user.TermsStatus ="Declined";}returnRedirectToAction("Index", "Home");}

csharp

Esta técnica proporciona más control, flexibilidad y separación de preocupaciones que el uso de la acción del controlador predeterminado de la página. Algunas de las capacidades que pueden ser escritas específicamente para la tarea incluyen:

  • Vinculación del modelo – Se pueden vincular diferentes campos en los datos devueltos.
  • Manejo de errores – Puede ser escrito específicamente para la acción.
  • Control de flujo – Cada botón puede tener su propio flujo de control, manteniendo el código más comprensible al limitar el número de rutas de retorno de cada método.

Tenga en cuenta que esta técnica requiere el soporte de HTML 5, por lo que no es compatible con ciertos navegadores. Cualquier navegador que haya sido actualizado desde 2011 o 2012 soporta esta funcionalidad. Consulte caniuse.com para obtener información específica sobre los navegadores.

Obsérvese también que, en el ejemplo anterior, el método TermsDecline vincula los mismos campos del objeto de usuario que TermsAccept, pero no tiene por qué hacerlo. El segundo método también podría ser:

123456[HttpPost][ValidateAntiForgeryToken]publicActionResultTermsDecline(){returnRedirectToAction("Index", "Home");}

csharp

Podemos ver que implementar una acción de control para cada botón no es tan oneroso como se podría esperar.