asp.net-mvc-3 – 在Asp.net MVC中为optgroup功能使用Helper代码

我没有与Helpers合作的经验,所以我有点不习惯使用手头的代码.

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

但是,我不知道如何使用它或调用此中定义的扩展方法.请告诉我如何在列表中使用它.

现在,以下是我想要使用扩展方法的选择列表的控制器代码.

ViewBag.ParentCategoryId = new SelectList(db.Categories,"Id","Name");

这是我的观看代码

@Html.DropDownListFor(model => model.Product.CategoryId,(IEnumerable<SelectListItem>)ViewBag.CategoryId,"---Choose Category---",new { @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>

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....