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.