Czy jest to możliwe podczas używania Html.TextBoxFor
do zastąpienia atrybutu nazwy?
Próbowałem bez powodzenia. Muszę użyć TextBoxFor, aby sprawdzanie poprawności po stronie klienta działało, jednak z powodów, w które nie będę wchodził, potrzebuję nazwy pola tekstowego, aby różniła się od wygenerowanej.
Próbowałem następujących rzeczy:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
Która działa dla ID, ale nie dla nazwy czy to możliwe?
Aktualizacja : Przeglądanie kodu TextBoxFor. Nie wygląda na to, że istnieje łatwy sposób. Mam nadzieję, że ktoś może udowodnić, że się mylę.
c#
asp.net-mvc-3
razor
html-helper
Rob Stevenson-Leggett
źródło
źródło
Odpowiedzi:
Rob, właściwie jest o wiele prostszy sposób. Zamiast nazwy użyj nazwy :
źródło
Name
wyników w dwóch atrybutach,Name
aname
spinacz modelu używaname
.Pytasz o to, ponieważ chcesz zastosować przedrostek do nazwy? Jeśli tak, możesz to zrobić, ustawiając
ViewData.TemplateInfo.HtmlFieldPrefix
kontroler.Wiele się o tym dowiedziałem z bloga Brada Wilsona .
źródło
EditorFor ma przeciążenie, w którym można podać
name
atrybut jako parametr:źródło
Wypróbuj EditorFor . możesz przekazać ciąg jako nazwę szablonu, jeśli chcesz się upewnić, że pole tekstowe jest renderowane, nawet jeśli typ właściwości nie jest ciągiem. Jeśli właściwość jest już ciągiem, nie musi
templatename
jawnie renderować pola tekstowego, więc możesz ją przekazaćnull
. Zauważ, że nie wymaga on jawnie parametru id, wywnioskuje go z nazwy elementu. Wszystkie funkcje sprawdzania poprawności są nadal aktywne w EditorForźródło
Odpowiedź Bena dała mi to, czego szukałem, z wyjątkiem tego, że musisz zawinąć w Html.Raw
źródło
Nazywa się Microsoft GOTCHA
Użyj nazwy pisanej wielkimi literami, w ten sposób
źródło
trochę „unpretty” =), spróbuj:
źródło
U mnie to działa! Mam nadzieję, że pomoże!
źródło
Nie jestem pewien, który z tych dwóch parametrów łańcuchowych w środku działa, ale zadziałał tylko wtedy, gdy wpisałem oba z nich.
źródło
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. Nie mam pojęcia, cotemplateName
ma być, więc skorzystałemnull
. DlahtmlFieldName
użyłem nazwy parametru (w moim przypadku "ipmi" zamiast "IPMI"). To mi wystarczyło.W tym przykładzie wyłączałem pola formularza na podstawie uprawnień, ale nadal je pokazywałem. Miałem ukryte pole do wysłania wartości do kontrolera, ale chciałem mieć inną nazwę pola w EditorFor. Pierwszy parametr po wartości modelu reprezentuje właściwość „nazwa”, drugi to nowa nazwa.
Prowadzi do:
źródło
Uprość, ponieważ już podałeś identyfikator, po prostu powinieneś móc użyć metody „TextBox” zamiast „TextBoxFor” i będzie działać dobrze po stronie klienta i po stronie serwera. Ponadto, chociaż zaakceptowana odpowiedź będzie działać, ale spowoduje utworzenie zduplikowanych atrybutów nazwy na tagu, jeśli sprawdzisz go za pomocą przeglądarki. Poniższe rozwiązanie nie ma tego problemu.
MvcHtmlString Html.TextBox (nazwa ciągu, wartość ciągu, htmlAttributes obiektu)
źródło