2013-05-15 16 views
7

Wie kann ich einen Standardwert in meinen Editorboxen einstellen, damit, falls ich nichts in die Box schreibe, kein Nullwert gesendet wird.Wie setze ich den Standardwert HTML.EditorFor()

<div class="editor-label"> 
     @Html.Label("Description") 
     </div>           // somthing like 
     <div>@Html.EditorFor(model => model.Description, " Default value ") 
     @Html.ValidationMessageFor(model => model.Description) 
    </div> 

Oder wenn ich ändern:

@Html.TextBoxFor(Model.somthing, "Default value") 

Antwort

0

Wie über das Definieren Ihres Modells „Standardwert“ für seine somthing Eigenschaft zu haben? In diesem Fall müssen Sie nichts Besonderes tun. Wenn dies nicht zufriedenstellend ist (z. B. wenn Sie nicht möchten, dass der Benutzer den "Standardwert" auf dem Bildschirm sieht), können Sie für dieses Modell einen benutzerdefinierten Modellbinder verwenden, der von DefaultModelBinder erbt und nur die OnModelUpdated-Methode überschreibt etwas entlang der Linien von:

model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing 

Bitte beachten Sie auch, dass EditorFor eigenen hTML ignoriert Attribute, die Sie an ihn schicken, soweit ich weiß.

11

Der einfachste Weg ist Eigenschaften im Modell zum Initialisieren:

public class PersonModel { 
    public PersonModel() { 
     FirstName = "Default first name"; 
     Description = "Default description"; 
    } 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Description { get; set; } 
} 

Und wenn Sie wollen, dass es zu der Ansicht senden, zum Beispiel in PersonController.Create aktions Methode:

public ActionResult Create() { 
    var model = new PersonModel(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Create(PersonModel model) { 
    // do something on post-back 
} 

That ist es. Denken Sie daran, dass Sie eine neue Instanz Ihres Modells erstellen und an die Ansicht übergeben müssen, um die Standardwerte zu verwenden. Da die Ansicht mit dieser Aktion Verfahren verbunden sind, erwartet eine PersonModel Instanz, aber wenn Sie die create-Methode wie folgt verwenden:

public ActionResult Create() { 
    return View(); 
} 

die Aussicht hat nichts (I null bedeuten), so dass Ihre Standardwerte sind nicht vorhanden in Tatsache.

Aber wenn Sie dies für komplizierte Zwecke tun möchten, z.B. Wenn Sie den Standardwert als Wasserzeichen verwenden oder wie @JTM besagt, dass die Endbenutzer keine Standardwerte sehen sollen, haben Sie andere Lösungen. Bitte lassen Sie mich Ihre Absicht wissen.

1

Statt mit

@Html.EditorFor(model => model.UserId) 

Verwenden

@Html.TextBoxFor(model => model.UserId, new { @Value = "Prabhat" }) 
18

Um einen Standardwert angezeigt werden in einem Feld müssen Sie 'Value' Eigenschaft in Htmlattributes für sie wie in diesem Beispiel zu:

@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @Value = ViewBag.DefaultDescription } }) 

Stellen Sie sicher, dass der Value in Großbuchstaben ist.

Auf diese Weise werden Sie nur einen Standardwert für das HTML-Feld und nicht im Modell zuweisen.

Das Zuweisen von Standardwerten im Modell erzwingt das Erstellen des Modellobjekts und das Einrichten von Standardwerten für Felder, die keine Nullwerte zulassen, wie Datumsangaben, die die Seite so verärgern, dass sie angezeigt wird 1/1/1001 00:00: 00 Werte in den Datetime-Feldern, die Sie im Rest des Modells haben könnten.

+0

Danke das ist, was ich gesucht habe. Der Großbuchstabe V hat mich erwischt. Warum sollten sie es so inkonsequent machen? – JSideris

+0

Dies funktioniert mit HTML-Elementen, die ein Wertattribut wie eine Eingabe haben.Für Elemente wie Textarea würde ich Javad_Amirys Lösung empfehlen – CF5

Verwandte Themen