wake-up-neo.net

ASP.NET MVC 3: Überschreiben Sie das "name" -Attribut mit TextBoxFor

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.

82

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" })
206
anar khalilov

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.

40
James McCormack

EditorFor hat eine Überladung, bei der Sie das name-Attribut als Parameter angeben können:

 @Html.EditorFor(expression, null, name)
12
Protector one

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")
8
archil

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"))
7
Rip Ryness

ein bisschen "unpretty" =), probiere:

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
3
benwasd

Es ist Anruf MicrosoftGOTCHA 

Verwenden Sie den Namen in Großbuchstaben

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
3
Ali Adravi

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" } })
1
Jonas
@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.

1
Mr.Ajdos

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" /> 
0
ScottLenart

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" }
0
TroySteven