asp.net-mvc – ASP.NET MVC 3列表到IEnumerable
发布时间:2020-07-20 22:47:54 所属栏目:asp.Net 来源:互联网
导读:我目前不满意填充DropDownListFor()对象的方式.我试图找到尽可能填充IEnumerable的通用方法.这就是我到目前为止所拥有的. 帮手: public static ListSelectListItem ToSelectList(IDictionarystring,string dictionaryItems, string selectedValue, string no
我目前不满意填充DropDownListFor()对象的方式.我试图找到尽可能填充IEnumerable的通用方法.这就是我到目前为止所拥有的. 帮手: public static List<SelectListItem> ToSelectList(IDictionary<string,string> dictionaryItems,string selectedValue,string noSelection,bool search = false) { List<SelectListItem> items = new List<SelectListItem>(); if (search) { items.Add(new SelectListItem { Selected = true,Value = "-1",Text = string.Format("-- {0} --",noSelection) }); } foreach (var item in dictionaryItems) { items.Add(new SelectListItem { Text = item.Key,Value = item.Value,Selected = selectedValue == item.Value ? true : false }); } return items .OrderBy(l => l.Text) .ToList(); } 控制器: [HttpGet] public ActionResult Index() { var model = new CreateModel(); var parentOrganisations = _orgs.FindBy(o => o.OwningOrganisationID == Globals.OrganisationID || o.ID == Globals.OrganisationID) .OrderBy(o => o.OrganisationName); Dictionary<string,string> items = new Dictionary<string,string>(); foreach (var item in parentOrganisations) { items.Add(item.OrganisationName,item.ID.ToString()); } model.Organisations = SelectLists.ToSelectList(items,"-1","-- None -- ",true); return View(model); } 视图: <div class="control-group"> <label class="control-label">Parent Organisation</label> <div class="controls"> @Html.DropDownListFor(m => m.ParentOrganisationID,Model.Organisations,new { @class = "input-xlarge"}) <p class="help-block">Select a parent organisation to create a branch</p> </div> </div> 控制器中似乎有很多重复的代码.它需要一个通用列表,将值和文本添加到字典中,然后将其用作帮助程序的输入,该帮助程序构建选择列表以作为模型的一部分发送. 有没有人有更好的方法来实现这一目标?我讨厌在我的控制器中臃肿,当我在表单上得到几个下拉时,这正是在这个实例中会发生的事情. 谢谢, 编辑 – 感谢Kenneth的帮助方法,我现在将整个事情整合到控制器中的一个调用中: model.Organisations = _orgs.FindBy(o => o.OwningOrganisationID == Globals.OrganisationID || o.ID == Globals.OrganisationID) .OrderBy(o => o.OrganisationName) .ToList() .ToSelectList(org => org.OrganisationName,org => org.ID.ToString(),"None",true); 解决方法您可以提供获取密钥和值的回调,然后使用它们.除此之外,您可以将其创建为扩展方法:扩展方法: public static List<SelectListItem> ToSelectList<T>(this List<T> Items,Func<T,string> getKey,string> getValue,noSelection) }); } foreach (var item in Items) { items.Add(new SelectListItem { Text = getKey(item),Value = getValue(item),Selected = selectedValue == getValue(item) ? true : false }); } return items .OrderBy(l => l.Text) .ToList(); } 用法: List<Org>() parentOrganisations = // fetch here model.Organisations = parentOrganisations.ToSelectList(org => org.ID.ToString(),org => org.OrganisationName,true); 注意:我在SO编辑器中键入了这个,因此您可能会遇到一些语法错误(尽管它们应该很容易解决). (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何使用selenium进行ASP.NET MVC集成测试
- 如何通过ASP.NET中的另一个下拉列表过滤下拉列表值,c#
- asp.net-mvc – ViewModels和渲染
- asp.net-mvc – ViewModel中的最佳实践
- asp.net-mvc – ASP.NET MVC 3 Beta 1 Block访问Razor视图
- entity-framework – 如果EF 5,如何定义自定义命名约定
- asp.net-mvc – MVC 5具有身份验证模式的外部身份验证=表单
- RSS2.0中文规范详解及示例
- asp.net – 使用/ signalr / ping调用时使用长轮询
- 设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)
推荐文章
站长推荐
- asp.net-mvc – ASP.NET MVC查看引擎解析顺序
- dependency-injection – 从ILogger访问当前的Ht
- asp.net-mvc – 使用NLog记录未处理的异常? ELM
- 从ASP.NET应用程序使用Active Directory时,Direc
- asp.net-mvc-3 – 如何从ASP.NET MVC#输出中删除
- asp.net-mvc-3 – 方法“OrderBy”必须在方法“跳
- 如何以编程方式将ListItems添加到ASP.NET中的Dro
- asp.net简单生成XML文件的方法
- 无法通过IP地址连接ASP.NET开发服务器(VS2010)
- asp.net-mvc – MicrosoftMvcValidation.js VS j
热点阅读