2013-05-15 14 views
7

Come posso impostare un valore predefinito nelle mie editor in modo che nel caso in cui non scrivo nulla nella casella non invii un valore nullo.come impostare il valore predefinito 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> 

O se cambio a:

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

risposta

0

Come su come definire il proprio modello di avere "Il valore di default" per la relativa proprietà somthing? in tal caso non è necessario fare nulla di speciale. Se ciò non è soddisfacente (ad es. Non vuoi che l'utente veda il "Valore predefinito" sullo schermo), puoi avere un modello personalizzato per questo modello che eredita da DefaultModelBinder, sovrascrive solo il metodo OnModelUpdated, in esso fa qualcosa sulla falsariga di:

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

si prega di notare, inoltre, che ignora EditorFor html attributi personalizzati da inviare ad esso per quanto ne so.

11

Il modo più semplice è quello di inizializzare le proprietà nel modello costruttore:

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; } 
} 

E quando si desidera inviare alla vista, per esempio in PersonController.Create action-metodo:

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

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

Quello è. Ricorda, devi creare una nuova istanza del tuo modello e passarlo alla vista per utilizzarne i valori predefiniti. Perché la vista associata a questo metodo di azione, si aspetta un esempio PersonModel, ma quando si utilizza il metodo creare in questo modo:

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

la vista ha niente (mi riferisco null), in modo che i valori di default non sono esiste in fatto.

Ma se si desidera eseguire questa operazione per scopi complicati, ad es. utilizzando il valore predefinito come filigrana, o come @JTMon ha detto, non si desidera che gli utenti finali vedano i valori predefiniti, ma si avranno alcune altre soluzioni. Per favore fatemi sapere il vostro scopo.

1

Invece di usare

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

Usa

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

Per visualizzare un valore predefinito in un campo è necessario assegnare proprietà 'Valore' in htmlAttributes per esso, come in questo esempio:

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

Assicurarsi che V in Value sia in maiuscolo.

In questo modo si assegna un valore predefinito nel campo html e non nel modello.

L'assegnazione di valori predefiniti nel modello obbliga a creare prima l'oggetto del modello e ad impostare i valori predefiniti per i campi non annullabili come i tempi di consegna, che renderanno la pagina in grado di mostrare fastidi 1/1/1001 00:00: 00 valori nei campi datetime che potreste avere nel resto del modello.

+0

Grazie questo è quello che stavo cercando. Il maiuscolo V mi ha preso. Perché dovrebbero renderlo incoerente in questo modo? – JSideris

+0

Funzionerà con elementi Html che hanno un attributo value come un input.Per elementi come textarea, consiglierei la soluzione di Javad_Amiry – CF5

Problemi correlati