2010-05-01 11 views
6

Próbuję nauczyć się MVC2, C# i Linq dla Entities w jednym projekcie (tak, jestem szalony) i mam pewne problemy z DropDownListFor i przekazywanie do niego SelectList.ASP.Net MVC2 DropDownListFor

Jest to kod w moim kontrolera:

public ActionResult Create() 
{ 
    var Methods = te.Methods.Select(a => a); 

    List<SelectListItem> MethodList = new List<SelectListItem>(); 

    foreach (Method me in Methods) 
    { 
     SelectListItem sli=new SelectListItem(); 
     sli.Text = me.Description; 
     sli.Value = me.method_id.ToString(); 
     MethodList.Add(sli); 
    } 

    ViewData["MethodList"] = MethodList.AsEnumerable(); 

    Talkback tb = new Talkback(); 
    return View(tb); 
} 

i mam kłopoty próbuje uzyskać DropDownListFor wziąć MethodList w ViewData. Kiedy próbuję:

<%:Html.DropDownListFor(model => model.method_id,new SelectList("MethodList","method_id","Description",Model.method_id)) %> 

błędy to z następującym komunikatem

DataBinding: 'System.Char' does not contain a property with the name 'method_id'. 

wiem, dlaczego tak jest, jak to jest przy MethodList jako ciąg, ale nie mogę dowiedzieć się, jak dostać się to wziąć SelectList. Jeśli wykonuję następujące czynności z normalnym DropDownList Jest to całkiem zadowolony z tego.

Czy ktoś może pomóc?

Odpowiedz

8

EDIT: Używasz Entity Framework, tak? W tym przypadku z informacją dodawania można umieścić w komentarzach, co chcesz zrobić coś takiego:

public ActionResult Create() 
{ 
    var viewModel = new CreateViewModel(); // Strongly Typed View 

    using(Entities dataModel = new Entities()) // 'te' I assume is your data model 
    { 
     viewModel.Methods = dataModel.Methods.Select(x => new SelectListItem() 
     { 
       Text = x.Description, 
       Value = x.method_id.ToString() 
     }); 
    } 

    return View(viewModel); 
} 

Twój silnie wpisany widok modelu byłoby:

public class CreateViewModel 
{ 
    public string SelectedMethod { get; set; } 
    public IEnumerable<SelectListItem> Methods { get; set; } 
} 

Kod pogląd byłby:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CreateViewModel>" %> 
<%-- Note the Generic Type Argument to View Page! --%> 
<%: Html.DropDownListFor(m => m.SelectedMethod, Model.Methods) %> 
+1

Klasa Talkback jest klasą tabeli L2E. Zawiera parametr method_id, który ma relację 0..1 z tabelą Methods, dlatego mam tylko właściwość Scalar method_id z tablicy Talkback i właściwość nawigacji Method do konkretnej metody odnoszącej się do id_id metody tego rekordu. Tak więc mogę uzyskać metodę odnoszącą się do konkretnego rekordu Talk Back, który, jako że jest to akcja tworzenia, będzie i tak pusty. Jednak nie mogę uzyskać dostępu do wszystkich metod za pomocą modelu Talk Back. Mam nadzieję, że ma to sens! – hermiod

+0

Zaktualizowano dodatkowym kodem. Wypróbuj to i sprawdź, czy to działa! – Tejs

+0

Teraz pojawia się błąd "Brak przeciążenia dla metody" DropDownListFor "przyjmuje 1 argumenty". Może źle zrozumiałem MVC, ale pomyślałem, że możliwe będzie generowanie wszystkich widoków z samego modelu bazy danych i modyfikowanie w razie potrzeby. Widziałem przykłady przekazywania dowolnych list do widoku (za pośrednictwem ViewData, z którego mój pierwotny kod był oparty), czy jest jakiś sposób, aby to działało w mojej sytuacji? Dzięki za pomoc Tejs – hermiod

Powiązane problemy