如何从mvc中的SelectList中获取名称值

How to get name value from SelectList in mvc

我想从 mvc 中的 SelectList 中获取名称值而不是 ID 值。

这是我的代码

控制器

var occupationList = new SelectList(new[] 
{
    new { ID = 1, Name = "Student" },
    new { ID = 2, Name = "House Wife" },
    new { ID = 3, Name = "Business Man" },
    new { ID = 4, Name = "Service Man" },
},
"ID", "Name", 1);
ViewData["occupationList"] = occupationList;
return View();

查看

@Html.DropDownList("Occupation", ViewData["occupationList"] as SelectList, new {@class="control-label", style="width:250px;" })

现在,当我 select 来自下拉列表的项目时,它会显示 selected 项目,但它会将 ID 值存储在数据库中。

例如:我从下拉列表中 select Student 名称值并保存。现在,它在数据库中存储 1 值。

但我不想存储 ID 值,即 1。我想在数据库中存储名称值,即 Student

谢谢。

当您提交表单时,selected 选项的值属性将从浏览器发送到该 select 元素的服务器。如果要发送名称而不是数字 id,则应将 SelectList 的数据值字段设置为名称而不是 Id

var occupationList = new SelectList(new[]
    {
        new { ID = 1, Name = "Student" },
        new { ID = 2, Name = "House Wife" },
        new { ID = 3, Name = "Business Man" },
        new { ID = 4, Name = "Service Man" },
    },
    "Name", "Name", "Student");
ViewData["occupationList"] = occupationList;

您的视图代码将相同

@Html.DropDownList("Occupation", ViewData["occupationList"] as SelectList,  
                                    new {@class="control-label", style="width:250px;" })

这将呈现 SELECT 元素的标记,其值和文本设置为同一字段。

<select id="Occupation" name="Occupation">
   <option value="Student" selected="selected">Student</option>
   <option value="House Wife">House Wife</option>
   <option value="Business Man">Business Man</option>
   <option value="Service Man">Service Man</option>
</select>

正如我之前提到的,现在当您提交表单时,将提交字符串值而不是数字 Id。这意味着您需要调整服务器端代码以接收字符串值并保存它(可能还需要更新数据库架构以存储字符串值而不是数值)

使用此代码将名称保存在数据库中

@Html.DropDownList("Occupation", new SelectList(ViewData["occupationList"] as SelectList, "Name", "Name") , new { @class = "control-label", style = "width:250px;" })