2012-12-14 17 views
5

Ho un selettore html e voglio usare il valore selezionato per il mio "model => model.type" nel mio modulo. C'è un modo per impostare il valore nel mio @Html.EditorFor(model => model.type) sul valore del selettore?Utilizzo di una casella di selezione html con rasoio

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Bet</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.type) 
    </div> 
    <div class="editor-field"> 

     <select id ="type"> 
    <option value="Football">Football</option> 
    <option value="Rugby">Rugby</option> 
    <option value="Horse Racing">Horse Racing</option> 
</select> 

     @Html.EditorFor(model => model.type) 
     @Html.ValidationMessageFor(model => model.type) 

    </div> 



    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
+0

non si può fare questo con rasoio, è necessario utilizzare Javascript, puoi usare jQuery? –

+1

Perché sono necessari due controlli per la proprietà type? Hai qualche ragione specifica per non usare solo un elenco a discesa? –

+0

scusate, errore mio, ho capito che volevi inserire il valore di "seleziona" nell'input " –

risposta

16

Si può provare con queste opzioni:

Modello:

public string Type { get; set; } 

public IEnumerable<SelectListItem> TypeList 
{ 
    get 
    { 
     return new List<SelectListItem> 
     { 
      new SelectListItem { Text = "Football", Value = "Football"}, 
      new SelectListItem { Text = "Rugby", Value = "Rugby"}, 
      new SelectListItem { Text = "Horse Racing", Value = "Horse Racing"} 
     }; 
    } 
} 

HTML (Razor):

@Html.DropDownListFor(model => model.Type, Model.TypeList) 

O

HTML (Razor):

@Html.DropDownListFor(model => model.Type, new SelectList(new string[] {"Football", "Rugby", "Horse Racing"}, Model.Type)) 
+0

Mi sto ottenendo: System.NullReferenceException: il riferimento all'oggetto non è impostato su un'istanza di un oggetto. – Nick

+1

Voglio solo sottolineare che ci sono due classi con il nome 'SelectListItem', quella che si trova in' System.Web.Mvc' e ** non ** quella in 'System.Web.WebPages.Html'. – Jocie

+0

Ciao @NickG, continui con il problema?forse puoi creare una domanda e poi puoi copiare qui il link –

1

La soluzione fornita da @andresdescalzo funziona solo quando passiamo il modello da Controller alla vista.

public class SomeController : Controller 
{ 
    public ActionResult SomeAction() 
    { 
    return View(new SomeModelWithIEnumerationsSelectListItem()) 
    } 
} 
0

Un'aggiunta le risposte esistenti: Se si ottiene l'eccezione "riferimento oggetto non impostato a un'istanza di un oggetto" in sede di attuazione soluzione @ di andresdescalzo, vi sia bisogno di:

  1. ritorno del modello con cui stai lavorando come @diwas menzionato
  2. Istanzia un modello sulla pagina del rasoio in modo da poter chiamare il metodo. Questo è utile se si utilizza un ViewModel invece di un semplice modello EF.

Il secondo può essere fatto in questo modo:

@{ var tempModel = new YourNameSpace.Models.YourModel(); } 
@Html.DropDownListFor(model => model.Type, tempModel.TypeList, Model.Type)) 
0

@ soluzione andresdescalzo (ultima) opera con una piccola modifica:

@Html.DropDownListFor(model => model.Type, new SelectList(new string[] {"Football", "Rugby", "Horse Racing"}, "Rugby"), htmlAttributes: new { @class = "form-control" }) 


Primo: Add una voce selezionata per l'elenco a discesa (ad es. "Rugby")
Secondo: rimuovere l'ultimo Model.Type e aggiungere htmlAttributes

PS: SelectedList parentesi aperte chiuso oggetto dopo selezionato di lista (qui è "Rugby")

Problemi correlati