2012-06-18 8 views
5

Ho un Html.DropDownListFor in un modello di editor che definisce il punto un valore selezionato. Se sostituisco il modello di editor con una vista parziale (copia incolla di HTML nel modello di editor per la vista parziale) funziona.Html.DropDownListPer il modello di editor non ha impostato il valore selezionato

codice di esempio

Modello:

public class MainItemViewModel 
{ 
    public int MainItemId { get; set; } 
    public ItemViewModel ItemViewModel { get; set; } 
} 

public class ItemViewModel 
{ 
    public int ItemId { get; set; } 
    public string Text { get; set; } 
    public IEnumerable<SelectListItem> ItemSelectList { get; set; } 
} 

Controller:

public class DropDownController : Controller 
{ 
    // 
    // GET: /DropDown/ 

    public ActionResult Index() 
    { 
     var mainItemViewmodel = new MainItemViewModel(); 
     mainItemViewmodel.MainItemId = 2; 
     mainItemViewmodel.ItemViewModel = new ItemViewModel(); 
     mainItemViewmodel.ItemViewModel.ItemId = 2; 
     mainItemViewmodel.ItemViewModel.Text = "bla5"; 
     List<SelectListItem> someItems = new List<SelectListItem>(){new SelectListItem(){Value = "1",Text = "Test1"},new SelectListItem(){Value = "2",Text = "Test2"}}; 
     mainItemViewmodel.ItemViewModel.ItemSelectList = someItems; 
     return View(mainItemViewmodel); 
    } 

    [HttpPost] 
    public ActionResult Index(MainItemViewModel mainItemViewModel) 
    { 
     return RedirectToAction("Index"); 
    } 

} 

discesa \ Index.chtml

@model MainItemViewModel 


@using (Html.BeginForm()) 
{ 
<br/> 
@Html.TextBoxFor(model => model.MainItemId) 
<br/> 
@Html.EditorFor(model => model.ItemViewModel) 

<input name="submit" type="submit" value="submit"/> 
} 

discesa \ EditorTemplates \ ItemV iewModel.chtml

@model ItemViewModel 
    @{ 
    @Html.DropDownListFor(model => model.ItemId, Model.ItemSelectList, "Select Item"); 
    <br/> 

    @Html.TextBoxFor(model => model.Text); 
    } 

Il DropDownListFor (modello => model.ItemId, Model.ItemSelectList, "Selezionare la voce"); non seleziona 2.Ho pensato che è in realtà dovrebbe selezionare automaticamente per voi

ho fatto la stessa cosa, tranne avere un altro modello di vista all'interno di un altro per tutta la mia DropDownList ed ha funzionato benissimo.

C'è un problema con i modelli Editor e DropDownList, ho guardato la maggior parte delle risposte a questo problema e non vedo alcuna risposta conclusiva che funziona ho guardato queste soluzioni

Problem binding selected value to DropDownListFor inside Editor Template

DropDownListFor - does not select “Selected” value

risposta

0

suppongo che hai una proprietà denominata ItemId nel vostro ItemViewModel

Poi basta essere sicuri di impostare il suo valore nel controller prima di inviare il ViewModel al Vista:

public ActionResult Edit() 
{ 
    var viewModel = new MainViewModel 
           { 
            ItemViewModel = new ItemViewModel{ ItemId = 7 } 
           }; 
    return View(viewModel); 
} 

Se volete maggiori opzioni diano un'occhiata al my answer here

+0

sto facendo esattamente questo impostando l'ItemId prima di inviare il ViewModel.Se utilizzo una vista parziale con lo stesso modello funziona. La mia domanda sarebbe: perché funziona con una vista parziale (stesso modello) anziché con l'editor. Per ora sto usando la vista parziale – kwiri

+0

Sì, grazie ma non è quello che stavo veramente cercando. Ho fatto un po 'di debugging con l'attuale sorgente MVC (RTM3) e ho visto che forse qualcosa non va bene. Si interrompe del modo in cui il nome della proprietà viene usato per ottenere il valore predefinito selezionato. Questo è il motivo per cui la mia lista a discesaPer l'editor per modello non seleziona il valore corretto mentre in una vista parziale funziona. fatto una semplice app di test usando il sorgente mvc e ha dimostrato le interruzioni di dropdown. Strano che ho notato che per le caselle di testo veniva usato un metodo diverso per ottenere i valori della proprietà. – kwiri

+0

L'idea è che vorrei usare la lista a cascata per il modo normale senza dover aggiungere altro codice per effettuare una selezione.Ho usato il dropdownlist come questo e ha funzionato bene, è solo questa particolare vista in cui ho bisogno di inserire il modello dell'editor (con il menu a discesa) in una vista come quella che ho descritto sopra – kwiri

Problemi correlati