Ist es möglich, Html.TextBoxFor
das Namensattribut zu überschreiben?
Ich habe es ohne Erfolg versucht. Ich muss TextBoxFor verwenden, damit die clientseitige Validierung funktioniert. Aus Gründen, auf die ich nicht eingehen möchte, muss sich der Name des Textfelds von dem generierten unterscheiden.
Ich habe folgendes versucht:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
Welches funktioniert für ID, aber nicht Name. Ist das möglich?
Update : Den Code für TextBoxFor untersuchen. Es sieht nicht so aus, als gäbe es einen einfachen Weg. Hoffentlich kann mir jemand das Gegenteil beweisen.
c#
asp.net-mvc-3
razor
html-helper
Rob Stevenson-Leggett
quelle
quelle
Antworten:
Rob, eigentlich gibt es einen viel einfacheren Weg. Verwenden Sie anstelle von name Name :
quelle
Name
Ergebnisse in zwei Attributen bereitstellen ,Name
undname
, und der Modellordner verwendet dasname
.Fragen Sie dies, weil Sie dem Namen ein Präfix zuweisen möchten? In diesem Fall können Sie dies
ViewData.TemplateInfo.HtmlFieldPrefix
in Ihrem Controller tun .Ich habe viel über dieses Zeug aus Brad Wilsons Blog gelernt .
quelle
EditorFor hat eine Überladung, in der Sie das
name
Attribut als Parameter angeben können :quelle
Versuchen Sie EditorFor . Sie können eine Zeichenfolge als Vorlagennamen übergeben, wenn Sie sicherstellen möchten, dass das Textfeld auch dann gerendert wird, wenn der Eigenschaftstyp keine Zeichenfolge ist. Wenn die Eigenschaft bereits eine Zeichenfolge ist, muss das
templatename
Textfeld nicht explizit gerendert werden, damit Sie es übergeben könnennull
. Beachten Sie, dass der Parameter id nicht explizit erforderlich ist, sondern aus dem Elementnamen abgeleitet wird. Und alle Validierungssachen sind mit EditorFor noch aktivquelle
Bens Antwort hat mir das gebracht, wonach ich gesucht habe, außer dass Sie sich in Html.Raw einwickeln müssen
quelle
Es heißt Microsoft GOTCHA
Verwenden Sie den Namen in Großbuchstaben wie folgt
quelle
ein bisschen "unpretty" =), versuche:
quelle
Bei mir funktioniert es! Ich hoffe das hilft!
quelle
Ich bin mir nicht sicher, welcher dieser beiden Zeichenfolgenparameter in der Mitte die Arbeit erledigt, aber es hat nur funktioniert, wenn ich beide eingegeben habe.
quelle
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. Keine Ahnung, was seintemplateName
soll, also habe ich verwendetnull
. DennhtmlFieldName
ich habe den Namen des Parameters verwendet (in meinem Fall "ipmi" anstelle von "IPMI"). Das hat den Trick für mich getan.In diesem Beispiel habe ich Formularfelder basierend auf Berechtigungen deaktiviert, sie aber weiterhin angezeigt. Ich hatte ein verstecktes Feld, um den Wert an den Controller zu senden, wollte aber einen anderen Feldnamen im EditorFor. Der erste Parameter nach dem Modellwert steht für die Eigenschaft "Name", der zweite für den neuen Namen.
Ergebnisse in:
quelle
Halten Sie es einfach, wenn Sie bereits die ID angegeben haben, sollten Sie einfach in der Lage sein, die Methode "TextBox" anstelle von "TextBoxFor" zu verwenden, und sie funktioniert gut auf Client- und Serverseite. Darüber hinaus funktioniert die akzeptierte Antwort zwar, erzeugt jedoch doppelte Namensattribute auf Ihrem Tag, wenn Sie sie mit einem Browser überprüfen. Die folgende Lösung hat dieses Problem nicht.
MvcHtmlString Html.TextBox (Zeichenfolgenname, Zeichenfolgenwert, Objekt htmlAttributes)
quelle