2010-05-01 3 views
6

MVC2, C# 및 Linq를 하나의 프로젝트에서 모두 배우려고하는데 (예, 미쳤습니다) DropDownListFor에 대한 일부 문제가 발생하여 SelectList를 전달했습니다. ASP.Net MVC2 DropDownListFor

내 컨트롤러에 코드입니다 :

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

나는 문제가 DropDownListForViewDataMethodList을하려고 노력 데. 내가하려고하면 :

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

그것은 오류를 다음과 같은 메시지가 문자열로 MethodList 복용으로

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

나는이는 이유를 알고,하지만 난 얻을 방법을 알아낼 수 없습니다 그것은 SelectList 걸릴. 정상으로 다음과 같이하면 DropDownList :

<%: Html.DropDownList("MethodList") %> 

매우 만족합니다.

아무도 도와 줄 수 있습니까?

답변

8

EDIT : 그렇다면 Entity Framework를 사용하고 있습니까?

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

당신의 강력한 형식의 뷰 모델은 다음과 같습니다 :

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

로보기 코드가 될 것이다 당신이 의견에 넣어 추가 정보와이 경우, 당신이 그런 짓을 할 것이다 :

<%@ 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

토크백 클래스는 L2E 테이블 클래스입니다. 여기에는 메서드 테이블과의 0..1 관계가있는 method_id가 포함되어 있으므로 Talkback 테이블의 method_id Scalar 속성과 해당 메서드의 method_id와 관련된 메서드에 대한 메서드 탐색 속성 만 있습니다. 그래서 특정 토크백 레코드와 관련된 메소드를 생성 할 수 있습니다.이 메소드는 작성 액션이므로 null이됩니다. 그러나 토크백 모델을 통해 모든 방법에 액세스 할 수는 없습니다. 희망이 맞습니다! – hermiod

+0

추가 코드로 업데이트되었습니다. 이것을 시험해보고 그것이 효과가 있는지보십시오! – Tejs

+0

이제 '메서드에 대한 오버로드 없음'DropDownListFor '인수가 1 개 있습니다.'라는 오류 메시지가 나타납니다. 어쩌면 나는 MVC를 잘못 이해하고 있지만 데이터베이스 모델 자체에서 모든 뷰를 생성하고 필요에 따라 수정할 수 있다고 생각했습니다. ViewData를 통해 임의의 목록을 전달하는 몇 가지 예를 보았습니다 (내 원래 코드가 기반이 된 ViewData를 통해), 내 상황에서이 작업을 수행 할 수있는 방법이 있습니까? 도움을 주셔서 감사합니다 Tejs – hermiod