Asp.net mvc ASP.NET-后端别名dropdownlist名称

Asp.net mvc ASP.NET-后端别名dropdownlist名称,asp.net-mvc,selectlist,Asp.net Mvc,Selectlist,我使用的是.NET3.5,MVC 我想使用一组字符串别名来表示数据库值。i、 e.当用户从下拉列表中选择一个选项时,它实际上会在表中将值设置为0、1、2等,而不是下拉列表中显示的文本 e、 g.我正在做: IdName[] Thing = new[] { new IdName { Id = 0, Name = "No Selection" }, new IdName { Id = 1, Name = "Thing A9" }, new IdName { Id = 2, Name = "

我使用的是.NET3.5,MVC

我想使用一组字符串别名来表示数据库值。i、 e.当用户从下拉列表中选择一个选项时,它实际上会在表中将值设置为0、1、2等,而不是下拉列表中显示的文本

e、 g.我正在做:

IdName[] Thing = new[] {   
new IdName { Id = 0, Name = "No Selection" }, 
new IdName { Id = 1, Name = "Thing A9" }, 
new IdName { Id = 2, Name = "Thing C12" }, 
new IdName { Id = 3, Name = "Thing F4" } 
};

MyDropDownList = new SelectList(Things, "Id", "Name",0);
并且认为:

<%= Html.DropDownList("MyDropDownList")%>

现在,这个很好用。我无法工作的是在“详细信息”视图中显示字段的值,并将“ThingC12”显示为文本,而不是“2”

还有,这是最好的方法吗?我不想使用数据库中的实际字符串,以防我修改条目上的文本(例如,将“Thing F4”的名称更改为“Thing F5”。)我完全接受其他想法


谢谢

因此,您希望您的操作方法(将存储用户选择)存储值,而不是下拉列表中显示的别名

我想你有两个选择

1-在服务器端,通过从数据源获取值(id),例如:示例中的Things[]数组

public ActionResult StoreValueFromDropDown(string MyDropDownList) {
        var id = Things.Single(thing => thing.Name == MyDropDownList).Id;
        // here goes the code to sotre the id
}
2-在客户端,通过添加存储下拉列表值的隐藏字段。 下面是一个使用jQuery的示例(我没有测试它):

然后需要修改操作方法以接受该隐藏字段的值

public ActionResult StoreValueFromDropDown(int ThingId) {

        // here goes the code to sotre the id
}

您说过:将“Thing C12”显示为文本而不是“2”在哪里?我的意思是,当用户从下拉列表中选择“Thing C12”时,它实际上将值存储在数据库中为2(因为我称之为SelectList())我将值存储在数据库中没有问题-它检索值并将其转换回问题所在的文本。我确实通过创建一个自定义视图控制器并添加一个方法来解决我的问题,该方法使用在数据库记录中找到的值在“Thing”列表上执行查找。现在我的问题是,我将不得不创建许多像这样的特定于字段的方法(以及一堆“事物”列表),我想有更好的方法来确保事物不那么特定于模型。不过,谢谢你的帮助。我认为这个问题可能更一般。我试图简化,但没有得到更好的结果。我又问了一个问题,想弄明白这一点。
$('#MyDropDownList').change(function(e){
     $('#ThingId').value($('#MyDropDownList option:selected').attr('value'));
});
public ActionResult StoreValueFromDropDown(int ThingId) {

        // here goes the code to sotre the id
}