如何从MVC3中的LINQ查询创建DropDownList?

时间:2012-08-01 12:01:02

标签: asp.net-mvc-3 linq selectlist html.dropdownlistfor

我需要知道如何创建一个下拉列表来表示“类别”表中的所有类别。

我已经使用此LINQ查询提取了我需要的每个类别的名称和值:

var dbcontext = new LNQ2SQLDataContext();
        var Q = from P in dbcontext.Categories
                where P.SUB_CAT == null
                select P;

我可以将此“Q”传递给我的观点,如下所示: 在控制器中:

return View(Q);

在视图中:

@model IEnumerable<MyAppName.Models.Category>

但我不知道如何使用@html.DropDownListFor()从模型中制作一个非常好的下拉列表。 :|

PLUS:

我可以从查询“Q”中创建SelectList,如下所示:

var category_list = new SelectList(Q, "CAT_ID", "CAT_Name");

但是我不知道如何从一个简单的{{1}创建一个下拉列表(不使用ViewBagcategory_list传递给视图) },或者:|

我搜索了尽可能多的博客和网站。但他们没有解决我的问题。我只是越来越困惑了!

那么有人可以帮忙吗? :/

1 个答案:

答案 0 :(得分:2)

要使用DropDownList,您必须拥有一个具有SelectList或数据的模型以生成选择列表,并且具有存储所选下拉列表值的属性或使用ViewBag传递category_list。所以你可以去......

Public Class MyViewModel
{
    Public Integer SelectedCategory { get; set; }
    Public SelectList Categories { get; set; }
}

Public Class ItemsController : Controller
{
    Public ActionResult Index()
    {
        var dbcontext = new LNQ2SQLDataContext();
        var Q = from P in dbcontext.Categories
                where P.SUB_CAT == null
                select P;
        var vm = new MyViewModel();
        vm.Categories = new SelectList(Q, "CategoryID", "Name");
        return View(vm);
    }

    [HttpPost()]
    Public ActionResult Index(MyViewModel vm)
    {
        var theSelectedCategory = vm.SelectedCategory;
    }
}

视图将是......

@model MyViewModel
@Html.DropDownListFor(model => model.SelectedCategory, Model.Categories, "Select Category")

注意:我通常不用C#编写代码,所以我无法保证语法完全正确。