Wie setze ich einen Standardwert mit Html.TextBoxFor?


198

Einfache Frage: Wenn Sie den HTML-Helper von ASP.NET MVC Framework 1 verwenden, ist es einfach, einen Standardwert für ein Textfeld festzulegen, da eine Überlastung vorliegt Html.TextBox(string name, object value). Als ich versuchte, die Html.TextBoxFor- Methode zu verwenden, war meine erste Vermutung, Folgendes zu versuchen, was nicht funktionierte:

<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>

Sollte ich mich vorerst nur an Html.TextBox (String, Objekt) halten?


Verwenden Sie diese <%: Html.TextBoxFor (x => x.Age, new {Value = "0"})%>, nehmen Sie eine kleine Änderung V Kapital in Wert vor.
Mohan Singh

Antworten:


354

Sie können dies versuchen

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

49
Neugierig, warum Großbuchstaben "V" funktionieren und Kleinbuchstaben "V" nicht? Diese Lösung überschreibt auch den Modellwert für Alter, selbst wenn einer vorhanden ist.
Derek Hunziker

74
Wert mit kleinem v ist das Schlüsselwort für C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx . Ich denke, deshalb funktioniert es nicht.
Tassadaque

3
Der Kommentar wurde positiv bewertet, weil ein Kommentar für eine Antwort, die so dunkel und aufschlussreich war, ... unangemessen schien.
ehdv

9
Es ist immer noch merkwürdig, dass @value nicht funktioniert. readonly ist auch ein Schlüsselwort für C #, aber @readonly funktioniert ohne Probleme.
Diego

16
Die HTML-Quelle im Browser ist <input Value = "0" id = "Age" name = "Age" type = "text" value = "" /> bei Verwendung von @Value. Das Eingabe-Tag enthält sowohl "Wert" mit "0" als auch "Wert" mit "".
Ricky

59

Dies sollte für MVC3 und MVC4 funktionieren

 @Html.TextBoxFor(m => m.Age, new { @Value = "12" }) 

Wenn Sie möchten, dass es sich um ein verstecktes Feld handelt

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 

21
Für versteckte Felder verwenden Sie einfach @ Html.HiddenFor (m => m.Age, new {@Value = "12"})
Buginator

gut @ Html.HiddenFor (m => m.Age, neu {@Value = "12"}) nicht wokring
RollerCosta

Und warum sollten Sie einen fest codierten Standardwert wie diesen ausblenden? unsinnig
Antoine Pelletier

31

Es stellt sich heraus, dass, wenn Sie das Modell nicht für die View-Methode in Ihrem Controller angeben, kein Objekt mit den Standardwerten für Sie erstellt wird.

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Loads default values
  Instructor i = new Instructor();
  return View("Create", i);
}

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Does not load default values from instructor
  return View("Create");
}

Wahrscheinlicher ist, dass es sich um einen MVC-Fehler oder eine MVC-Funktion handelt, da Html.PasswordFor (m => m.Password, new {class = "form-control", value = "default" in fast dieselbe HTML-Datei gerendert wird und "default" ausgeführt wird Zum Beispiel funktioniert value = Model.Email, aber value = ViewBag.Email funktioniert. Diese akzeptierte Antwort ist also besser und sauberer, nicht so
ZZZ

Was ist Instructor?
Csaba Toth

20

Der Standardwert ist der Wert Ihrer Model.AgeImmobilie. Das ist der springende Punkt.


3
Es scheint eine schlechte Idee zu sein, wenn das Modell Standardwerte verwaltet. Was ist zu tun, wenn für dieselbe Sammlung von Modellelementen unterschiedliche Standardwerte erforderlich sind?
RredCat

@ RedCat Einverstanden, dies trübt die Trennung der UI-Ebene
Evan M

18

Sie können einfach tun:

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

oder besser, dies wechselt zum Standardwert '0', wenn das Modell null ist, z. B. wenn Sie zum Bearbeiten und Erstellen dieselbe Ansicht haben:

@Html.TextBoxFor(x => x.Age, new { @Value = (Model==null) ? "0" : Model.Age.ToString() })

11

value = "0" setzt den Standardwert für @ Html.TextBoxfor

Die Groß- und Kleinschreibung "v" sollte Groß- und Kleinschreibung sein

Unten ist ein Arbeitsbeispiel:

@Html.TextBoxFor(m => m.Nights, 
    new { @min = "1", @max = "10", @type = "number", @id = "Nights", @name = "Nights", Value = "1" })

9

So habe ich es gelöst. Dies funktioniert, wenn Sie dies auch zum Bearbeiten verwenden.

@Html.TextBoxFor(m => m.Age, new { Value = Model.Age.ToString() ?? "0" })

Wenn Alter null ist, erhalten Sie eine Nullzeiger-Ausnahme, weil die ?? wird versuchen, die Rückgabe des ToString () zu überprüfen.
eaglei22

@ eaglei22 Nullable <T> .ToString () gibt eine leere Zeichenfolge zurück, wenn der Wert null ist.
Tom Lint

Vielen Dank, dass Sie gezeigt haben, wie man eine Bindung in einem anonymen Objekt modelliert
nichts am

9

Diese Arbeit für mich

@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })

+1 für den benannten Parameter, der besonders beim Kopieren / Einfügen von Code hilfreich ist und der eine Methode mit vielen Überladungen verwendet
Ekus

8

Die Verwendung @Valueist ein Hack, da zwei Attribute ausgegeben werden, z.

<input type="..." Value="foo" value=""/>

Sie sollten dies stattdessen tun:

@Html.TextBox(Html.NameFor(p => p.FirstName).ToString(), "foo")

7

Dies hat bei mir funktioniert. Auf diese Weise setzen wir den Standardwert auf leere Zeichenfolge

@Html.TextBoxFor(m => m.Id, new { @Value = "" })

2
Während dieser Code die Frage beantworten kann, ist es besser, einen Kontext aufzunehmen, der erklärt, wie er funktioniert und wann er verwendet werden soll. Nur-Code-Antworten sind auf lange Sicht nicht sinnvoll.
Bono

@ Bono hat einige Kommentare hinzugefügt
eric_eri

5

Wenn Sie ein Teilseitenformular zum Bearbeiten und Hinzufügen haben, besteht der Trick, den ich als Standardwert verwende, 0darin, Folgendes zu tun:

@Html.TextBox("Age", Model.Age ?? 0)

Auf diese Weise wird es sein, 0wenn es nicht eingestellt ist, oder das tatsächliche Alter, wenn es existiert.


1
Wenn Age ein Int ist, funktioniert das nicht. Es müsste ein nullable int sein.
Justin Self

0

Versuchen Sie dies auch, dh entfernen Sie neues {} und ersetzen Sie es durch eine Zeichenfolge.

<%: Html.TextBoxFor(x => x.Age,"0") %>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.