Asp.net mvc 3 在Asp.net MVC中使用optgroup功能的帮助程序代码

Asp.net mvc 3 在Asp.net MVC中使用optgroup功能的帮助程序代码,asp.net-mvc-3,html-helper,Asp.net Mvc 3,Html Helper,我没有与助手一起工作的经验,所以我有点困在使用手头的代码上 我的要求很简单,我只需要DropDownListFor扩展方法中的optgroup功能。在搜索时,我遇到了这个问题,并将其复制到一个名为MyExtensionClass.cs的文件中 但是,我不知道如何使用它或调用本文中定义的扩展方法。请告诉我如何将此与我的列表一起使用 现在,下面是selectlist的控制器代码,我想对其使用扩展方法 ViewBag.ParentCategoryId = new SelectList(db.Categ

我没有与助手一起工作的经验,所以我有点困在使用手头的代码上

我的要求很简单,我只需要
DropDownListFor
扩展方法中的optgroup功能。在搜索时,我遇到了这个问题,并将其复制到一个名为MyExtensionClass.cs的文件中

但是,我不知道如何使用它或调用本文中定义的扩展方法。请告诉我如何将此与我的列表一起使用

现在,下面是selectlist的控制器代码,我想对其使用扩展方法

ViewBag.ParentCategoryId = new SelectList(db.Categories, "Id", "Name");
这是我的视图代码

@Html.DropDownListFor(model => model.Product.CategoryId, 
     (IEnumerable<SelectListItem>)ViewBag.CategoryId, "---Choose Category---", 
       new { @class = "required" })  
@Html.DropDownListFor(model=>model.Product.CategoryId,
(IEnumerable)ViewBag.CategoryId“”--选择类别--“,
新的{@class=“required”})

请帮助我使用optgroup将此方法升级为扩展方法。

我们使用Serge Zab的帮助程序进行optgroup下拉列表。以下是一个示例:

视图模型:

public class OurViewModel
{
    public int? TypeId { get; set; }
    public IEnumerable<GroupedSelectListItem> GroupedTypeOptions { get; set; }
}
public ActionResult Add()
{
    var model = new OurViewModel
    {
        // fill with initial values
    };
    PutTypeDropDownInto(model);
    return View(model);
}

[NonAction]
private void PutTypeDropDownInto(OurViewModel model)
{
    model.GroupedTypeOptions = _repos.GetTypes()
        .OrderBy(t => t.Category.EnglishName).ThenBy(t => t.EnglishName)
        .Select(t => new GroupedSelectListItem
        {
            GroupKey = t.Category.RevisionId.ToString(),
            GroupName = t.Category.EnglishName,
            Text = t.EnglishName,
            Value = t.RevisionId.ToString()
        }
    );
}
视图

@Html.DropDownGroupListFor(m => m.TypeId, Model.GroupedTypeOptions, 
    "[Select a type]")
请注意,您不能使用常规的SelectList。您必须使用他的GroupedSelectListItem类的集合。此外,我们的解决方案不使用viewbag。下拉列表在viewmodel上是强类型的

更新

要使html助手在视图中工作,视图需要能够找到它。您可以在MyExtensionClass.cs命名空间的视图顶部添加@using指令,也可以将该命名空间添加到视图特定的web.config中,如下所示:

<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="Microsoft.Web.Mvc" />
    <add namespace="Namespace.For.MyExtensionClass" />
  </namespaces>
</pages>

这是在5.2版的ASP.NET MVC中添加的

SelectListItem中的属性
Group
允许您为每个项目指定一个组

Html.DropDownList()
DropDownListFor()
现在根据项目列表中包含的组生成
optgroup
元素。