2012-06-18 4 views
5

J'ai un Html.DropDownListFor dans un modèle d'éditeur qui définit par point une valeur sélectionnée. Si je remplace le modèle de l'éditeur par une vue partielle (copie du code HTML dans le modèle de l'éditeur vers la vue partielle), cela fonctionne.Html.DropDownListFor dans l'éditeur Modèle ne définissant pas la valeur sélectionnée

exemple de code

Modèle:

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

} 

DropDown \ 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"/> 
} 

DropDown \ EditorTemplates \ ItemV iewModel.chtml

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

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

Le DropDownListFor (modèle => model.ItemId, Model.ItemSelectList, "Select Item"); ne sélectionne pas 2.I pensé qu'il est censé réellement sélectionner automatiquement pour vous

Je fais la même chose, sauf ayant un autre modèle de vue dans une autre pour tous mes dropdownlist et il a bien fonctionné.

Y at-il un problème avec les modèles de l'éditeur et dropdownlist, je l'ai regardé la plupart des réponses à ce problème et je ne vois pas de réponse concluante qui fonctionne J'ai regardé ces solutions

Problem binding selected value to DropDownListFor inside Editor Template

DropDownListFor - does not select “Selected” value

Répondre

0

Je suppose que vous avez une propriété nommée ItemId dans votre ItemViewModel

Alors juste être sûr de définir sa valeur dans le contrôleur avant d'envoyer le ViewModel à la vue:

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

Si vous voulez plus d'options jeter un oeil à my answer here

+0

que je fais exactement ce en définissant le ItemId avant d'envoyer le ViewModel.If j'utilise une vue partielle avec exactement le même modèle cela fonctionne.Ma question serait pourquoi fonctionne-t-il avec une vue partielle (même modèle) au lieu de l'editorFor.Right maintenant j'utilise la vue partielle – kwiri

+0

Oui, j'ai merci, mais ce n'est pas ce que je cherchais vraiment.J'ai fait du débogage avec la source MVC (RTM3) et j'ai vu Cela est dû au fait que le nom de la propriété est utilisé pour obtenir la valeur par défaut sélectionnée. C'est pourquoi ma liste déroulanteFor dans l'éditeurFor Template ne sélectionne pas la valeur correcte alors que dans une vue partielle, elle fonctionne. fait une application de test simple en utilisant la source mvc et il a prouvé la rupture de la liste déroulante.Strange j'ai remarqué que pour les boîtes de texte une méthode différente d'obtenir les valeurs de la propriété a été utilisée. – kwiri

+0

L'idée est que je voudrais utiliser la liste déroulante de la manière normale sans avoir à ajouter de code supplémentaire pour faire une sélection.J'ai utilisé la liste déroulante comme ceci et cela a fonctionné très bien, c'est seulement cette vue particulière où je dois jeter dans le modèle d'éditeur (avec la liste déroulante) dans une vue comme ce que j'ai décrit ci-dessus – kwiri

Questions connexes