当前位置: 首页 > 编程语言 > C#

如何在MVC Html.DropDownList()中添加静态项目列表分享

时间:2023-04-11 01:40:56 C#

C#学习教程:如何在MVCHtml.DropDownList()中添加静态项目列表NETHtml.DropDownList()在MVC中,最佳实践是什么?我打算尝试找到一种使用newSelectList(new{key="value"}...的方法,但是一个不起作用,还有两个,如果我的静态列表无论如何都在ViewData中声明为IList/IENumerablepassed?最好不要在视图中创建SelectList。您应该在控制器中创建它并使用ViewData传递它。示例:varlist=newSelectList(new[]{new{ID="1",Name="name1"},new{ID="2",Name="name2"},new{ID="3",Name="name3"},},"ID","Name",1);ViewData["列表"]=list;returnView();传递给构造函数:IEnumerable对象,值字段,文本字段和选择的值。在视图中:所有MVC新手一开始都会避免'M'字,但它确实从开头开始改变的MVC首字母缩写词。也许,只是也许,你可能想用一个模型开始你的解决方案......只是说。不要重复自己(干)。你最终会复制并放置“newPageData()”粘贴到将选项列表传递给视图的每个控制器中。然后您将要删除或添加选项,并且必须编辑每个控制器的PageData。此外,您希望使用最少的不必要的冗长“Add”、“New”、“IS”和“Name”来键入最少的代码。由于选择选项(和/或单选按钮列表)中只有一个键值对,因此请在模型中使用尽可能轻的数据结构,即字典。然后只需在控制器中引用模型并使用包含LINQLambda表达式的DropDownListFor将字典转换为视图中的SelectList。吓坏了?你不是一个人。我当然是。这是我用来自学M,V和C的一个例子:MVC的模型部分:usingSystem.Web.Security;使用System.Collections.Generic;使用系统文本;使用System.Linq.Expressions;使用System.Web.Routing;使用System.Web.Helpers;使用System.Web.Mvc.Html;使用MvcHtmlHelpers;使用System.Linq;//EzPL8.com是我工作的公司,因此是命名空间根。//EzPL8增加了服务员和调酒师的脑宽度,通过增加他们的“记忆”来识别顾客的名字和他们的食物和饮料偏好。//这是为客户的鸡蛋偏好生成选择选项显示的教学示例。namespaceEzPL8.Models{publicclassMyEggs{publicDictionaryEgg{get;放;}publicMyEggs()//constructor{Egg=newDictionary(){{0,"NoPreference"},//向客户显示完整的鸡蛋菜单{1,"Ihateeggs"},//要么提供替代方案鸡蛋或不在客户的个性化动态生成菜单上显示鸡蛋//确认客户是否希望他们的鸡蛋以他们通常喜欢的方式煮熟,即{2,"OverEasy"},{3,"SunnySideUp"},{4,"Scrambled"},{5,"HardBoiled"},{6,“班尼迪克蛋”}};}}控制器现在非常简单,只需传递模型,它避免创建一个孤立的概念,它可能不会被孤立到一个页面:publicActionResultIndex(){varmodel=newEzPL8.Models.MyEggs();返回视图(模型);}View在事件重构中使用DropDownListFor(而不是DropDownList)和Lambda表达式进行强类型操作:@Html.DropDownListFor(m=>m.Egg,newSelectList(Model.Egg,"Key","Value"))Voilà,生成的HTML:我讨厌鸡蛋胜过EasySunnySideUpScrambledHardBoiledEggsBenedict注意:不要被VALUE混淆,它来自字典的键,来自SelectList()中的“值”,即文本/标题(例如EggsBenedict)在选项标签之间结束。用例:为了最小化应用程序和数据库之间的流量,我创建了一个静态列表以避免数据库查询,并且下拉列表很少(如果有的话)更改。然而,改变是不可避免的,六个月后,我客户的餐厅将外出就餐;不是因为绿色火腿,而是因为他们对鸡蛋过敏,厨师将它与华夫饼混合在一起。餐厅需要更新他们的客户信息,以立即包括食物过敏。虽然他们喜欢回头客,但他们并不酷,死去的客户会像僵尸一样回来,因为他们的信用卡被取消而无法付款。反问:我是否应该修改与客户鸡蛋偏好相关的所有控制器和视图?或者只是将{7,"allergictoeggs"}插入模型?另一个反问:煎鸡蛋不是吗?您是否要在模型中添加一次{8,"Omelette,Western"},{9,"Omelette,Mushroom-Feta-Spinach"}并让添加自动传播到所有使用它们的视图中的所有下拉列表?底线这可能比您要求的要多,但您说的是MVC,而不仅仅是VC:1.在*M*VC中使用模型。2.Useadictionaryinyourmodelwhentheselectlistisbasedonlyon"primarykey"andtitle.3.如果您的静态列表没有在某处使用数据库查找表,您的应用程序可能不是很有用。向静态列表添加选项时,您很可能还需要对查找表执行插入操作,以避免与数据库中其他表发生主键/外键关系完整性错误。4.使用lambda和强类型数据结构来避免错误并获得预输入支持。好的,我决定采纳我自己的建议,这应该在控制器中定义:仅供参考,我刚回来:PageDatadata=newPageData(){Formats=new[]{new{ID="string",Name="Text"},new{ID="int",Name="Numeric"},new{ID="decimal",Name="Decimal"},new{ID="datetime",Name="Date/Time"},new{ID="timespan",Name="Stopwatch"}},.........};返回视图(数据);...(忽略上下文)和查看ASPX方面:如果有人有更好的方法来执行此操作,我会很乐意接受他们的回答。以上就是C#学习教程:HowtoaddastaticitemlistinMVCHtml.DropDownList()分享的所有内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多付出注意---本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: