C# ASP.Net MVC2 DropDownListFor

C# ASP.Net MVC2 DropDownListFor,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,我正在尝试在一个项目中学习MVC2、C和Linq to Entities是的,我疯了,我在DropDownList for和将SelectList传递给它时遇到了一些问题 这是我的控制器中的代码: public ActionResult Create() { var Methods = te.Methods.Select(a => a); List<SelectListItem> MethodList = new List<SelectListItem&

我正在尝试在一个项目中学习MVC2、C和Linq to Entities是的,我疯了,我在DropDownList for和将SelectList传递给它时遇到了一些问题

这是我的控制器中的代码:

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);
} 
它会出错,并显示以下消息

DataBinding: 'System.Char' does not contain a property with the name 'method_id'.
我知道这是为什么,因为它将MethodList作为一个字符串,但我不知道如何让它接受SelectList。如果我使用普通下拉列表执行以下操作:

它对此感到非常高兴

有人能帮忙吗?

编辑:那么您正在使用实体框架,是吗?在这种情况下,使用您在评论中添加的信息,您可能希望执行以下操作:

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) %>
您的视图代码为:

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

对讲类是L2E表类。它包含一个与Methods表有0..1关系的method_id,因此我只有来自Talkback表的method_id标量属性和与该记录的method_id相关的特定方法的method navigation属性。因此我可以得到与特定Talkback记录相关的方法,因为这是一个创建操作,无论如何都将为空。但是,我无法通过对讲模型访问所有方法。希望这有意义!用附加代码更新。试试这个,看看是否对你有用!现在我得到了错误'No重载for method'DropDownListFor'takes 1 arguments'。也许我误解了MVC,但我认为可以从数据库模型本身生成所有视图,并根据需要进行修改。我见过一些通过ViewData将任意列表传递到视图的示例,我的原始代码就是基于这些示例编写的。在我的情况下,有什么方法可以实现这一点吗?谢谢你的帮助TejsOops,对不起。我得到DropDownList的方法签名是错误的。我已经更新了代码。您可以从类生成-当您选择添加视图时,请选中“强类型视图”复选框,然后,一旦选择类型,应启用“添加视图”对话框中的第二个下拉菜单,以便您从该模型自动生成HTML。例如,以下是一个屏幕截图: