2009-07-30 15 views
13

Mam witrynę, która używała ASP.Net MVC Beta 5, a ja właśnie zaktualizowałem ją do ASP.Net MVC 1.0. Mam problem z wybranym elementem z rozwijanej listy.ASP.Net Html.DropDownList Wybrany element nie został wybrany

Osoba obserwacji ma podobne pytanie (Html.DropDownList in ASP.NET MVC RC (refresh) not pre-selecting item), ale nie ma odpowiedzi (inne niż może to być błąd)

metoda

moim kontroler wygląda następująco:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult View(Guid id) 
{ 
    IntegrationLogic logic = new IntegrationLogic(new IntegrationLinq()); 
    CompanyLogic companyLogic = new CompanyLogic(new CompanyLinq()); 
    IntegrationContainer container = new IntegrationContainer(); 

    container.Sources = logic.GetImportSource(id); 
    container.Companies = companyLogic.GetCompanies(); // Returns a IList<company> 
    container.SourceActions = logic.GetAllSourceActions(); // Returns an IList<SourceAction> 
    container.SinkActions = logic.GetAllSinkActions(); 
    container.SuccessActions = logic.GetAllSuccessActions(); 
    container.FailureActions = logic.GetAllFailureActions(); 
    container.Actions = logic.GetAllActions(); 
    container.Watchers = logic.GetAllWatcherActions(); 
    container.ChainActions = logic.GetAllChainActions(); 

    return View("View", container); 
} 

Widok jest silnie wpisane przed modelu następująco

public partial class View : ViewPage<IntegrationContainer> {} 

obszar problem w szablonie widoku jest:

<label for="Companies">Company: </label><%=Html.DropDownList("Companies", 
               new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%> 

Tworzę listę rozwijaną, wybrana pozycja nigdy nie zostanie wybrana - i to jest problem. "item.CompanyID" to Guid, "id" to Guid, a "name" to ciąg na obiekcie firmy dostarczonym w IList, który jest przechowywany w instancji ViewData.Model.Companies.

Czy to rzeczywiście błąd? - Trudno mi zrozumieć, dlaczego jest on nadal obecny w ASP.Net MVC ... Byłbym całkowicie zadowolony, jeśli to jest coś, co zrobiłem.

Bez względu na to, jaka byłaby zalecana praca do wykonania?

Dzięki

Odpowiedz

21

Okazuje się, że jeśli nazwa sterowania poprzez Html.DropDownList jest taka sama jak nazwa obiektu kolekcji powoduje problem z ASP.NET MVC.

Więc jeśli zmienię następujący kod:

<label for="Companies">Company: </label><%=Html.DropDownList("Companies", 
               new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%> 

do:

<label for="Companies">Company: </label><%=Html.DropDownList("company", 
               new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%> 

wszystko teraz działa. Wynika to z faktu, że nazwa kolekcji na modelu to Model.Companies .... bonkers ... również zauważyć, że zmiana nazwy kontrolki z "Companies" na "company" również nie działa (co czyni w sensie, jak sądzę).

Mogłabym zmienić model, ale jak większość jest zbudowana przy użyciu Linq-SQL, myślę, że łatwiej jest zmienić nazwy elementów HTML.

+1

Po przejrzeniu 6 pytań na temat SO, jest to jedyna odpowiedź, która zadziałała ... dzięki! – Martin

+0

Nie jest problemem. :) – Kinlan

+0

Uderzyłem głową o ścianę, bardzo dziękuję. – aboy021

Powiązane problemy