我没有与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" })
解决方法
我们使用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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。