C'è un modo semplice per aggiungere un'opzione "--Please select--" a un DropDownListFor in MVC 3?DropdownListFor valore predefinito
risposta
Così, ho fatto qualcosa di simile:
@Html.DropDownListFor(model => model.Dessert,
new SelectList(Model.AvailableDesserts, "DessertID", "DessertName"),
"---Select A Dessert ---")
sembra funzionare abbastanza bene. Dessert
nel mio viewmodel è quello selezionato dall'utente. AvailableDesserts
è una raccolta di quelli tra cui scegliere. Spero possa aiutare.
Ho un metodo paio derivazione a SelectList
public static SelectList PreAppend(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
{
var items = new List<SelectListItem>();
items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
items.AddRange(list.Items.Cast<SelectListItem>().ToList());
return new SelectList(items, "Value", "Text");
}
public static SelectList Append(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
{
var items = list.Items.Cast<SelectListItem>().ToList();
items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
return new SelectList(items, "Value", "Text");
}
public static SelectList Default(this SelectList list,string DataTextField,string SelectedValue)
{
return list.PreAppend(DataTextField, SelectedValue, true);
}
Poi il mio rasoio sembra:
@Html.DropDownListFor(m=>m.SelectedState,
Model.StateList().Default("Select One",""))
Sono nuovo a MVC, puoi per favore dimmi come aggiungerei i miei metodi di estensione alla mia SelectList? – user517406
Aggiungere una classe statica al progetto e aggiungervi questi metodi. Assicurati che la pagina tenti di chiamarli dall'importazione dello spazio dei nomi se non è lo spazio dei nomi del progetto globale. La sintassi nel rasoio è '@using Myproject.Extensions' o qualsiasi altra cosa tu chiami la tua classe. Per ulteriori informazioni, consultare: http://msdn.microsoft.com/en-us/library/bb383977.aspx – asawyer
Preferirei la route Helper/Extension come si propone ma sto avendo qualche problema nell'implementazione. Ottengo il seguente errore: 'Impossibile lanciare l'oggetto di tipo 'MyApp.UI.Models.Address' per digitare 'System.Web.Mvc.SelectListItem'. Il codice che uso è:' @ Html.DropDownListFor (m => m.EmailAddressID, nuova SelectList (Model.Addresses, "AddressID", "EmailAddress"). PreAppend ("--- Seleziona un indirizzo ---", "")) 'Compila bene ed è riconosciuto nella vista, ma presenta l'errore sopra in fase di esecuzione. Il metodo hardcoded presentato da @itsmatt funziona. Qualche idea sulla modifica potrei aver bisogno dei metodi di estensione? – atconway
Hi quello di provare questo (nel caso in cui si utilizza il metodo DisplayFor)
private IEnumerable<SelectListItem> AddDefaultOption(IEnumerable<SelectListItem> list, string dataTextField, string selectedValue)
{
var items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = dataTextField, Value = selectedValue});
items.AddRange(list);
return items;
}
Quindi aggiungere questo codice al controller
//lambda expression binding
ViewBag.YourList = db.YourTable.Select(x => x).ToList().Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = x.DisplayName.ToString()
});
ViewBag.YourList = AddDefaultOption(ViewBag.YourList, "Select One...", "null", true);
E finalmente al View è possibile visualizzare un menu a discesa, casella combinata proprio come questo
<div class="editor-label">
Your Label
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ForeignKey, (IEnumerable<SelectListItem>)ViewBag.YourList)
</div>
È strano che tu stia facendo '.Select (x => x) .ToList()' prima del ' .Seleziona (x => new SelectListItem' Questo non è necessario. –
Ho voluto impostare il valore predefinito a tutto ciò che è stato passato come parametro URL chiamato SiteType:
<div class="form-group">
@Html.LabelFor(model => model.Type, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.Type, ChangeOrderSite.SiteTypeNames.Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString(), Selected = s.Key.ToString() == Request["SiteType"] }), new { @class = "control-label col-md-2" })
@Html.ValidationMessageFor(model => model.Type)
</div>
</div>
La mia discesa è un elenco di tipi di sito.
- 1. Selezionare un valore predefinito in dropdownlistfor MVC 4
- 2. DropDownListFor - non seleziona il valore "Selezionato"
- 3. MVC: Come dichiaro il valore del nome utilizzando DropDownListFor
- 4. MVC3 DropDownListFor - un semplice esempio?
- 5. Kendo DropDownListFor() con ASP.NET MVC-
- 6. RingtonePreference Valore predefinito
- 7. ES6 Classes Valore predefinito
- 8. Valore argomento predefinito C++
- 9. DependencyProperty Valore predefinito
- 10. Valore attributo predefinito JAXB
- 11. valore predefinito del puntatore.?
- 12. Yii DropDownList valore predefinito
- 13. DataContract, valore DataMember predefinito
- 14. CheckBoxPreference Android Valore predefinito
- 15. Valore predefinito di BOOL
- 16. Annotazione valore "null" predefinito
- 17. with_subelements ansible valore predefinito
- 18. Valore della proprietà ViewBag in DropDownListFor invece del valore della proprietà Model
- 19. Python argparse: valore predefinito o valore specificato
- 20. valore Array Bash nell'assegnazione valore predefinito
- 21. DropDownListFor (...) selezionando booleano false per impostazione predefinita
- 22. Impostazione valore predefinito di DateTimePicker
- 23. DateTimePicker Valore predefinito: come evitarlo?
- 24. sqlite3 cambia colonna valore predefinito
- 25. Valore predefinito ListPreference non visualizzato
- 26. RestTemplate - valore di timeout predefinito
- 27. Valore argomento Objective-C predefinito
- 28. Metodo valore predefinito parametro array
- 29. Facelets: ui: valore predefinito param
- 30. ActiveAdmin - Filtro con valore predefinito
Questo aggiunge un "--Please select--" nella parte superiore del menu a discesa, ma per impostazione predefinita all'elemento successivo nel menu a discesa, almeno nel mio esempio: @ Html.DropDownListFor ( x => x.SelectedTeamID, nuova lista di selezione (Model.Teams, "TeamID", "TeamName"), "--Please select--") – user517406
Qual è il valore predefinito del SelectedTeamID che si sta inviando alla vista? Nel mio 'Create.cshtml' verrà impostato di default l'opzione" --- Select A Dessert --- "(l'ID è un numero intero e ha come valore predefinito 0) mentre nel mio' Edit.cshtml' verrà impostato di default a qualsiasi valore il valore corrente è per 'model.Dessert' nel mio viewmodel. Questo potrebbe essere il risultato del mio dessert che inizia a 1 (la chiave primaria nella mia tabella di dessert inizia a 1). Solo una supposizione, davvero. Penso che sia per quello che sta succedendo. – itsmatt
Credo che quello che fa sia guardare il valore corrente del campo del modello e quindi provare a selezionarlo per impostazione predefinita. Ad esempio, se quando hai costruito il tuo viewmodel (ad esempio, per una chiamata Create) e hai impostato il SelectedTeamID su 6 e lo hai passato nella vista, verrà visualizzato TeamName associato a TeamID 6, supponendo che ne esistesse uno. – itsmatt