What is the purpose of a dropdown menu when the selections' value and text are different?

What is the purpose of a dropdown menu when the selections' value and text are different?

正如标题所暗示的,我很困惑创建下拉菜单并将值设置为整数而不是它们所代表的文本的目的,如下所示。

@Html.DropDownList("MySkills", new List<SelectListItem>  
{  
   new SelectListItem{ Text="ASP.NET MVC", Value = "1" },  
   new SelectListItem{ Text="ASP.NET WEB API", Value = "2" },  
   new SelectListItem{ Text="ENTITY FRAMEWORK", Value = "3" },  
   new SelectListItem{ Text="DOCUSIGN", Value = "4" },  
   new SelectListItem{ Text="ORCHARD CMS", Value = "5" },  
   new SelectListItem{ Text="JQUERY", Value = "6" },  
   new SelectListItem{ Text="ZENDESK", Value = "7" },  
   new SelectListItem{ Text="LINQ", Value = "8" },  
   new SelectListItem{ Text="C#", Value = "9" },  
   new SelectListItem{ Text="GOOGLE ANALYTICS", Value = "10" },  
}) 

我不明白的是,例如,在 CRUD 脚手架中,创建表单会显示带有每个文本的下拉菜单 属性。但是,查看提交表单的详细信息,选择的数据returns Value 属性 而不是。

如果我想创建一个表单供人们返回查看,当用户选择 'LINQ' 时显示“8”是没有意义的。然而,我为下拉列表找到的每个资源(加上 Visual Studio 中的 CRUD 脚手架)都是这样创建的。为什么?有没有办法显示文本 属性 而不是值 属性?

这完全取决于需要对该数据完成的内容。

例如,假设表单用于 creating/editing 数据库中的一条记录,该记录具有查找表的外键。您问题中的示例用于此目的,也许用户正在填写某种开发配置文件并希望 select 首选技术或多种 select 熟悉的技术。

当发布到服务器时,此记录很可能存储在数据库中。规范化数据库将具有指向包含查找的其他表的外键,这些表通常是整数键。所以你有两个选择:

  1. 发送查找值的文本。查询数据库以查找与该文本关联的标识符。读取该标识符并在插入到正在保存的记录中时使用它。
  2. 发送查找的 ID 值。保存到记录中。

第二个选项似乎更简单一些。

一般来说,在任何规范化数据场景中,您都会传递标识符而不是值。它们更小、更简单,并且当值本身可能随时间变化时不会改变。

If I want to create a form for people to go back and look on, it would not make sense to display '8' when the user selected 'LINQ'.

确实你不会显示“8”,你会显示“LINQ”。 系统 使用标识符。 user 呈现友好的人类可读界面。因此,当向用户显示记录时,您将显示友好的人类可读值。但是当在应用程序逻辑中传递 引用 数据时,标识符使它更容易和更一致。

Text 视为您希望用户看到的部分,并将 select 视为来自 DropDown。另一方面,Value 是必须保存在数据库中的部分,或者您必须使用它来实现某些功能,它可以是 GUID 和 Id 等。没有需要用户了解 Value,另一方面,开发人员必须 “知道”哪个 Text 代表哪个 Value 以实现功能或知道必须在数据库中保存什么值。