Jak dodać właściwość ID do Html.BeginForm () w asp.net mvc?

210

Chcę sprawdzić poprawność formularza za pomocą jquery, ale nie ma on na razie IDwłaściwości, jak dodać go do formularza w asp.net mvc? Używam tego ...

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

i moja wtyczka walidatora jquery bierze to,

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

Teraz chcę podać identyfikator jako signupform... Wszelkie sugestie ...

ACP
źródło
2
Dobre pytanie, nie ma nic wspólnego z jquery
Don Rolling

Odpowiedzi:

349

To powinno dodać identyfikator.

ASP.NET MVC 5 i niższe:

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

ASP.NET Core: można użyć pomocników znaczników w formularzach, aby uniknąć nieparzystej składni ustawiania identyfikatora.

<form asp-controller="Account" asp-action="Register" method="post" id="signupform" role="form"></form>
Jason Rowe
źródło
4
dlaczego akcja i kontroler są tam puste? Czy możesz to wyjaśnić, proszę?
ACP
7
Nie wiem, gdzie chcesz opublikować formularz, więc właśnie wyzerowałem je.
Jason Rowe,
8
Również ustawienie akcji i kontrolera na wartość null pozwala uniknąć konieczności kodowania ich na stałe. Jest to przydatne, jeśli masz formularz w widoku częściowym i ten fragment jest używany w wielu widokach, takich jak Utwórz i Edytuj.
Ken Pespisa
1
Gdzie można znaleźć interfejs API lub dokumentację dla wszystkich pomocników HTML? Na przykład, gdzie można dowiedzieć się, co oznaczają parametry?
Zapnologica
2
@Zapnologica Spójrz na to msdn.microsoft.com/en-us/library/dd460542%28v=vs.108%29.aspx . Parametr htmlAttributes składa się z obiektu zawierającego pary nazwa / wartość. new {id = "myid", @ class = "myclass"}
Jason Rowe
7

Dodałem trochę kodu do mojego projektu, więc jest to wygodniejsze.

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 *@
}
PRZYZNAĆ
źródło
5

W System.Web.Mvc.Html (w System.Web.Mvc.dll ) formularz początkowy jest zdefiniowany następująco: - Szczegóły

BeginForm (ten HtmlHelper htmlHelper, string stringName, string
controllerName, object routeValues, metoda FormMethod, obiekt htmlAttributes

Oznacza, że ​​powinieneś używać w ten sposób:

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

Więc zadziałało w 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
źródło
4

Może trochę się spóźnię, ale w moim przypadku musiałem umieścić identyfikator w 2. anonimowym obiekcie. Wynika to z faktu, że pierwszy dotyczy wartości trasy, tj. Zwracanego adresu URL.

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

Mam nadzieję, że to może komuś pomóc :)

Daniaal
źródło