0

我正在使用 .NET 3.5,MVC。

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

例如我在做:

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")%>

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

另外,这是解决此问题的最佳方法吗?我不想使用数据库中的实际字符串,以防我修改条目上的文本(例如,将“Thing F4”的名称更改为“Thing F5”。)我完全愿意接受其他一些想法。

谢谢!

4

1 回答 1

1

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

我认为你在这里有两个选择。

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 的示例(我没有测试它):

<input type="hidden" id="ThingId" />

,

$('#MyDropDownList').change(function(e){
     $('#ThingId').value($('#MyDropDownList option:selected').attr('value'));
});

那么您需要修改您的操作方法以接受该隐藏字段的值

public ActionResult StoreValueFromDropDown(int ThingId) {

        // here goes the code to sotre the id
}
于 2009-05-05T04:54:50.120 回答