2012-06-18 19 views
5

Ich habe eine Html.DropDownListFor in einer Editor-Vorlage, die einen ausgewählten Wert Punkt setzt. Wenn ich die Editor-Vorlage durch eine Teilansicht (Kopieren von HTML-Code in der Editor-Vorlage in die Teilansicht) ersetzen, funktioniert es.Html.DropDownListFor im Editor Vorlage nicht gesetzt Wert

Beispielcode

Modell:

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

Die DropDownListFor (Modell => model.ItemId, Model.ItemSelectList "Select Item"); nicht wählen 2.Ich dachte, es tatsächlich zu automatisch wählen soll für Sie

Ich habe die gleiche Sache außer tun in einem anderen eine andere Ansicht Modell, das für alle meine Dropdownlist und es hat geklappt.

Gibt es ein Problem mit Editor Vorlagen und Dropdownlist, ich habe bei den meisten Antworten auf dieses Problem sah, und ich sehe keine schlüssige Antwort, die arbeitet ich an diesen Lösungen gesucht haben

Problem binding selected value to DropDownListFor inside Editor Template

DropDownListFor - does not select “Selected” value

Antwort

0

ich nehme an, Sie haben eine Eigenschaft namens ItemId in Ihrem ItemViewModel

Dann nur sicher sein, zu legen Sie es Wert im Controller ist, bevor Sie die Ansichtsmodell auf die Ansicht zu senden:

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

Wenn Sie mehr Optionen zu sehen my answer here

+0

will ich genau mache, dass durch die ItemId Einstellung vor dem Senden ViewModel.Wenn ich eine Teilansicht mit genau gleichen Modell es funktioniert.Meine Frage wäre, warum funktioniert es mit einer Teilansicht (gleiches Modell) anstelle der editorFor.Right jetzt verwende ich die Teilansicht – kwiri

+0

Ja, ich danke aber Es ist nicht das, wonach ich wirklich gesucht habe. Ich habe ein Debugging mit der eigentlichen MVC-Quelle (RTM3) gemacht und ich habe es gesehen dass sie vielleicht etwas nicht richtig sind. Es bricht wegen der Art und Weise, wie der Eigenschaftsname verwendet wird, um den voreingestellten Wert zu erhalten. Deshalb wählt meine Dropdown-Liste im Editor für Vorlage nicht den richtigen Wert aus, während sie in einer Teilansicht funktioniert machte eine einfache Test-App mit der mvc-Quelle und es hat die Dropdown-Breaks.Strange Ich habe festgestellt, dass für Textboxen eine andere Methode zum Abrufen der Eigenschaftswerte verwendet wurde. – kwiri

+0

Die Idee ist, ich möchte die Dropdown-Liste für den normalen Weg verwenden, ohne zusätzlichen Code hinzufügen zu müssen, um eine Auswahl zu treffen.Ich habe die Dropdown-Liste so verwendet und es hat gut funktioniert, es ist nur diese bestimmte Ansicht, wo ich die Editor-Vorlage (mit dem Dropdown) in einer Ansicht wie oben beschrieben habe – kwiri

Verwandte Themen