¿Cómo agregar propiedad de identificación a Html.BeginForm () en asp.net mvc?

210

Quiero validar mi formulario usando jquery pero no tiene una IDpropiedad a partir de ahora ¿cómo agregarlo al formulario en asp.net mvc? Estoy usando esto ...

<% using (Html.BeginForm()) {%>

y mi plugin jquery validator toma esto,

var validator = $("#signupform").validate({

Ahora quiero dar identificación como signupform... Cualquier sugerencia ...

ACP
fuente
2
Buena pregunta, no tiene nada que ver con jquery
Don Rolling

Respuestas:

349

Esto debería agregar la identificación.

ASP.NET MVC 5 y versiones inferiores:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "signupform" }))
   { } %>

ASP.NET Core: puede usar ayudantes de etiqueta en formularios para evitar la sintaxis impar para configurar la identificación.

<form asp-controller="Account" asp-action="Register" method="post" id="signupform" role="form"></form>
Jason Rowe
fuente
44
¿Por qué la acción y el controlador son nulos allí? ¿Podría explicarlo por favor?
ACP
77
No sé dónde quieres publicar el formulario, así que los hice nulos.
Jason Rowe
8
Además, tener la acción y el controlador configurados en nulo le evita tener que codificarlos. Esto es útil si tiene su formulario dentro de una vista parcial y ese parcial se usa en múltiples vistas como Crear y Editar.
Ken Pespisa
1
¿Dónde se encuentra la API o la documentación para todos los ayudantes html? Por ejemplo, ¿dónde averiguar qué significan los parámetros?
Zapnologica
2
@Zapnologica Eche un vistazo a este msdn.microsoft.com/en-us/library/dd460542%28v=vs.108%29.aspx . El parámetro htmlAttributes consiste en un objeto que contiene pares de nombre / valor. nuevo {id = "myid", @ class = "myclass"}
Jason Rowe
7

He agregado un código a mi proyecto, por lo que es más conveniente.

HtmlExtensions.cs:

namespace System.Web.Mvc.Html
{
    public static class HtmlExtensions
    {
        public static MvcForm BeginForm(this HtmlHelper htmlHelper, string formId)
        {
            return htmlHelper.BeginForm(null, null, FormMethod.Post, new { id = formId });
        }

        public static MvcForm BeginForm(this HtmlHelper htmlHelper, string formId, FormMethod method)
        {
            return htmlHelper.BeginForm(null, null, method, new { id = formId });
        }
    }
}

MySignupForm.cshtml:

@using (Html.BeginForm("signupform")) 
{
    @* Some fields *@
}
ADMITIR
fuente
5

En System.Web.Mvc.Html (en System.Web.Mvc.dll ) el formulario de inicio se define como: - Detalles

BeginForm (este HtmlHelper htmlHelper, string actionName, string
controllerName, object routeValues, método FormMethod, object htmlAttributes)

Significa que deberías usar así:

Html.BeginForm (string actionName, string controllerName, object routeValues, FormMethod method, object htmlAttributes)

Entonces, funcionó en MVC 4

@using (Html.BeginForm(null, null, new { @id = string.Empty }, FormMethod.Post,
    new { @id = "signupform" }))
{
    <input id="TRAINER_LIST" name="TRAINER_LIST" type="hidden" value="">
    <input type="submit" value="Create" id="btnSubmit" />
}
Muhammad Ashikuzzaman
fuente
4

Puede ser un poco tarde, pero en mi caso tuve que poner la identificación en el segundo objeto anónimo. Esto se debe a que el primero es para valores de ruta, es decir, la URL de retorno.

@using (Html.BeginForm("Login", "Account", new {  ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { id = "signupform", role = "form" }))

Espero que esto pueda ayudar a alguien :)

Daniaal
fuente