ASP.NET - псевдонимы выпадающих имен на бэкэнде - PullRequest
0 голосов
/ 05 мая 2009

Я использую .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».) Я полностью открыт для некоторых других идей.

Спасибо!

1 Ответ

1 голос
/ 05 мая 2009

Таким образом, вы хотите, чтобы ваш метод действия (который будет хранить выбор пользователя) сохранял значение, а не псевдоним, показанный в раскрывающемся списке.

Я думаю, у вас есть два варианта.

1- На стороне сервера, получая значение (идентификатор) из вашего источника данных, например, массив 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
}
...