Ist es möglich, das Namensattribut mit Html.TextBoxFor
zu überschreiben?
Ich habe es ohne Erfolg versucht. Ich muss TextBoxFor verwenden, um die clientseitige Validierung zum Laufen zu bringen. Aus Gründen, auf die ich nicht eingehen möchte, muss der Name des Textfelds von dem generierten abweichen.
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 : Ein Blick in den Code für TextBoxFor. Es sieht nicht so aus, als ob es einen einfachen Weg gibt. Hoffentlich kann mich jemand falsch beweisen.
Rob, eigentlich gibt es einen viel einfacheren Weg. Verwenden Sie statt name Name:
@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
Fragen Sie das, weil Sie dem Namen ein Präfix zuweisen möchten? Wenn ja, können Sie dies tun, indem Sie ViewData.TemplateInfo.HtmlFieldPrefix
in Ihrem Controller einstellen.
Ich habe viel über dieses Zeug von Brad Wilsons Blog gelernt.
EditorFor hat eine Überladung, bei der Sie das name
-Attribut als Parameter angeben können:
@Html.EditorFor(expression, null, name)
Versuchen Sie EditorFor . Sie können string als Vorlagenname übergeben, wenn Sie sicherstellen möchten, dass das Textfeld gerendert wird, auch wenn der Eigenschaftstyp nicht string ist. Wenn die Eigenschaft bereits eine Zeichenfolge ist, muss templatename
nicht explizit zum Rendern von Textfeldern verwendet werden. Sie können null
übergeben. Beachten Sie, dass der id-Parameter nicht explizit erforderlich ist. Er wird aus dem Elementnamen abgeleitet. Und alle Überprüfungssachen sind mit EditorFor noch aktiv
@Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
bens Antwort hat mir das gegeben, wonach ich gesucht habe, außer dass Sie in Html.Raw einpacken müssen
@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
ein bisschen "unpretty" =), probiere:
@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
Es ist Anruf MicrosoftGOTCHA
Verwenden Sie den Namen in Großbuchstaben
@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
Bei mir funktioniert es! Ich hoffe das hilft!
@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })
Ich bin mir nicht sicher, welche der beiden Zeichenfolgeparameter in der Mitte die Arbeit machen, aber es funktionierte nur, wenn ich beide eingab.
In diesem Beispiel habe ich Formularfelder basierend auf Berechtigungen deaktiviert, sie aber weiterhin angezeigt. Ich hatte ein ausgeblendetes Feld, um den Wert an den Controller zu senden, wollte aber einen anderen Feldnamen in EditorFor . Der erste Parameter nach dem Modellwert steht für die Eigenschaft "Name", der zweite ist der neue Name.
@Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} });
Ergebnisse in:
<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" />
Halten Sie es einfach, wenn Sie bereits die ID angeben, sollten Sie in der Lage sein, die Methode "TextBox" anstelle von "TextBoxFor" zu verwenden, und dies funktioniert gut auf Client- und Serverseite. Außerdem funktioniert die akzeptierte Antwort zwar, es werden jedoch doppelte Namensattribute für Ihr Tag erstellt, wenn Sie es mit einem Browser überprüfen. Die folgende Lösung hat dieses Problem nicht.
MvcHtmlString Html.TextBox (Stringname, Stringwert, Objekt htmlAttributes)
@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }