Comment ajouter une propriété ID à Html.BeginForm () dans asp.net mvc?

210

Je veux valider mon formulaire en utilisant jquery mais il n'a pas de IDpropriété pour l'instant comment l'ajouter au formulaire dans asp.net mvc? J'utilise ceci ...

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

et mon plugin de validation jquery prend cela,

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

Maintenant, je veux donner id comme signupform... Toute suggestion ...

ACP
la source
2
Bonne question, n'a rien à voir avec jquery
Don Rolling

Réponses:

349

Cela devrait obtenir l'identifiant ajouté.

ASP.NET MVC 5 et inférieur:

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

ASP.NET Core: vous pouvez utiliser des aides de balise dans les formulaires pour éviter la syntaxe étrange pour définir l'ID.

<form asp-controller="Account" asp-action="Register" method="post" id="signupform" role="form"></form>
Jason Rowe
la source
4
pourquoi l'action et le contrôleur sont nuls là-bas? Pourriez-vous l'expliquer plz?
ACP
7
Je ne sais pas où vous souhaitez publier le formulaire, je viens de les rendre nuls.
Jason Rowe
8
Le fait de définir l'action et le contrôleur sur null vous évite d'avoir à les coder en dur. Cela est utile si vous avez votre formulaire dans une vue partielle et que cette partie est utilisée dans plusieurs vues comme Créer et Modifier.
Ken Pespisa
1
Où trouve-t-on l'API ou la documentation pour tous les assistants html? Par exemple, où savoir ce que représentent les paramètres?
Zapnologica
2
@Zapnologica Jetez un œil à ce msdn.microsoft.com/en-us/library/dd460542%28v=vs.108%29.aspx . Le paramètre htmlAttributes se compose d'un objet qui contient des paires nom / valeur. nouveau {id = "myid", @ class = "myclass"}
Jason Rowe
7

J'ai ajouté du code à mon projet, c'est donc plus pratique.

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 *@
}
ADMETTRE
la source
5

Dans System.Web.Mvc.Html (dans System.Web.Mvc.dll ), le formulaire de début est défini comme: - Détails

BeginForm (ce HtmlHelper htmlHelper, chaîne actionName, chaîne
controllerName, objet routeValues, méthode FormMethod, objet htmlAttributes)

Signifie que vous devez utiliser comme ceci:

Html.BeginForm (chaîne actionName, chaîne controllerName, objet routeValues, méthode FormMethod, objet htmlAttributes)

Donc, cela a fonctionné dans 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
la source
4

Peut être un peu en retard mais dans mon cas j'ai dû mettre l'id dans le 2ème objet anonyme. C'est parce que le premier est pour les valeurs de route, c'est-à-dire l'URL de retour.

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

J'espère que cela peut aider quelqu'un :)

Daniaal
la source