2010-06-14 29 views
173

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, mit der Html.TextBoxFor Methode, war meine erste Vermutung folgend versuchen, die nicht funktioniert hat:Wie setze ich einen Standardwert mit Html.TextBoxFor?

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

Soll ich nur Stick mit Html.TextBox (string, object) für jetzt?

+0

Verwendung dieses <%: Html.TextBoxFor (x => x.Age, new {Value = "0"})%>, ein kleines Änderung V Kapital in Wert machen. –

Antwort

29

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

[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"); 
} 
+0

Das war die Lösung für mein Projekt, danke. – wtjones

+0

hat diesen Ansatz gefallen, danke! – Romias

+0

Wahrscheinlicher ist es MVC Bug oder Feature, da Html.PasswordFor (m => m.Password, neue {class = "form-control", value = "default" in fast der gleichen HTML gerendert wird, und die "default" gehen auf den Wert erfolgreich wird angezeigt. zum Beispiel Wert = Model.Email funktioniert, aber value = ViewBag.Email funktioniert. also das akzeptierte Antwort ist besser und sauberer, nicht so Hacking. – ZZZ

19

Der Standardwert ist der Wert Ihrer Model.Age-Eigenschaft. Das ist der springende Punkt.

+3

Scheint, es ist eine schlechte Idee, wenn das Modell die Standardwerte verwaltet. Was ist zu tun, wenn für die gleiche Sammlung von Modellelementen ein anderer Standardwert benötigt wird? – RredCat

+0

@RredCat Einverstanden, das matscht die Trennung der UI-Schicht –

309

können Sie versuchen, diese

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

Neugierig zu wissen Warum funktioniert das Großbuchstabe "V" und das Kleinbuchstabe "v" nicht? Außerdem überschreibt diese Lösung den Modellwert für "Alter", selbst wenn einer vorhanden ist. –

+58

Wert mit kleinem v ist ein Schlüsselwort für C# http://msdn.microsoft.com/ en-us/library/x9fsa0sw.aspx. Deshalb denke ich, das ist, warum es nicht funktioniert. – Tassadaque

+2

upvoted den Kommentar, weil man upvote für eine dieser dunklen und aufschlussreiche Antwort schien ... unzureichend. – ehdv

52

Dies sollte für Arbeit MVC3 & MVC4

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

Wenn Sie es wünschen ein verstecktes Feld

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

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

+0

gute @ Html.HiddenFor (m => m.Age, neue {@Value = "12"}) nicht wokring – RollerCosta

+0

Und warum würden Sie einen hart codierten Standardwert wie diesen verstecken? non sense –

5

sein, wenn Sie habe ein Teilseitenformular für sowohl die Bearbeitung und das Hinzufügen, dann ist der Trick, den ich zu 0 auf Standardwert verwenden, ist folgendes zu tun:

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

Auf diese Weise wird es 0 wenn nicht gesetzt oder das tatsächliche Alter, wenn es vorhanden ist.

+1

Wenn Age ein int ist, wird das nicht funktionieren; Es müsste ein NULL-fähiger Int sein. –

16

Sie können einfach tun:

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

oder besser, diese auf Standardwert schalten ‚0‘, wenn das Modell null ist, zum Beispiel, wenn Sie die gleiche Ansicht sowohl für die Bearbeitung haben und die Schaffung von:

0

Versuchen Sie dies auch, das ist neu entfernen {} und ersetzen Sie es durch eine Zeichenfolge.

<%: Html.TextBoxFor(x => x.Age,"0") %> 
7

@Value Verwendung ist ein Hack, weil es zwei Attribute gibt, z.B .:

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

Sie sollten diese stattdessen tun:

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

Hier ist, wie ich es gelöst. Dies funktioniert, wenn Sie dies auch zum Bearbeiten verwenden.

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

Das sieht wie eine Neuschreibung einer vorhandenen Antwort aus ... –

+0

Wenn Age Null ist .. wirst du eine Nullzeiger-Ausnahme bekommen, weil die ?? wird versuchen, die Rückgabe von ToString() zu überprüfen. – eaglei22

+0

@ adleri22 Nullable .ToString() gibt eine leere Zeichenfolge zurück, wenn der Wert null ist. –

10

Wert = "0" wird defualt Wert für @Html setzen.TextBoxfor

seine Groß- und Kleinschreibung „v“ sollte Kapital sein

Unten Beispiel arbeitet:

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

"" v "sollte Kapital sein" habe meine Stimme .. – Jack0fshad0ws

4

dies für mich gearbeitet, auf diese Weise setzen wir den Standardwert zu leeren String

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

Während dieser Code die Frage beantworten kann, wäre es besser, einige Kontext zu enthalten, zu erklären, wie es funktioniert und wann es zu verwenden. Nur-Code-Antworten sind auf lange Sicht nicht nützlich. – Bono

+0

@Bono hat einige Kommentare hinzugefügt –

3

Diese Arbeit für mich

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