2010-05-01 16 views
6

Estoy tratando de aprender MVC2, C# y Linq a entidades todo en un proyecto (sí, estoy enojado) y estoy teniendo algunos problemas con DropDownListFor y pasándole la lista de selección.ASP.Net MVC2 DropDownListFor

Este es el código en mi controlador:

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

y estoy teniendo problemas tratando de conseguir el DropDownListFor para tomar el MethodList en ViewData. Cuando intento:

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

errores a cabo con el siguiente mensaje

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

sé por qué esto es, ya que se está llevando MethodList como una cadena, pero no puedo encontrar la manera de llegar tomar el SelectList. Si hago lo siguiente con una normal de DropDownList:

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

Es bastante contento con esto.

¿Alguien puede ayudar?

Respuesta

8

EDIT: ¿Estás utilizando Entity Framework, sí? En ese caso, la información, además de poner en los comentarios, que le gustaría hacer algo como esto:

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

Su modelo de vista inflexible sería:

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

Su código de vista sería:

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

La clase Talkback es una clase de tabla L2E. Contiene un method_id que tiene una relación 0..1 con la tabla Methods, por lo tanto, solo tengo la propiedad de method_id Scalar de la tabla de Talkback y la propiedad de navegación de Método para el Método particular relacionado con el id_método de ese registro. Para que pueda obtener el método relacionado con un registro de talkback en particular que, como se trata de una acción de creación, sería nulo de todos modos. Sin embargo, no puedo acceder a todos los métodos a través del modelo de Talkback. ¡Espero que tenga sentido! – hermiod

+0

Actualizado con código adicional. ¡Prueba esto y mira si eso funciona para ti! – Tejs

+0

Ahora aparece el error 'No hay sobrecarga para el método' DropDownListFor 'toma 1 argumentos'. Quizás no entendí MVC pero pensé que sería posible generar todas las Vistas desde el propio modelo de Base de Datos y modificarlas según sea necesario. He visto algunos ejemplos de pasar listas arbitrarias a la vista (a través de ViewData, que se basaba en mi código original), ¿hay alguna manera de hacer que esto funcione en mi situación? Gracias por su ayuda Tejs – hermiod

Cuestiones relacionadas