2009-05-05 2 views
0

Я использую .NET 3.5, MVC.ASP.NET - имена выпадающих списков псевдонимов на заднем конце

Я хочу использовать набор псевдонимов строк для представления значений базы данных. то есть когда пользователь выбирает параметр из раскрывающегося списка, он фактически устанавливает значение в таблице как 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».) Я полностью открыт для некоторых других идей.

Спасибо!

+0

Вы сказали: показ «Thing C12» в качестве текста вместо «2» где? – 2009-05-05 04:20:04

+0

Что я имею в виду, когда пользователь выбирает «Thing C12» из выпадающего списка, он фактически сохраняет значение в базе данных как 2 (из-за того, как я вызвал SelectList()) – user101306

+0

ok Я получаю точку – 2009-05-05 04:27:30

ответ

1

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

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

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 
} 
+0

Я храню значение в базе данных без проблем - оно извлекало значение и переводило его обратно в текст, который был проблемой. Мне удалось решить мою проблему, создав пользовательский контроллер представления и добавив метод для выполнения поиска в списке «Thing», используя значение, найденное в записи базы данных. Теперь моя проблема заключается в том, что мне нужно будет создать множество таких специфичных для поля методов (наряду с кучей списков «Thing»), и я полагаю, что есть лучший способ сделать это, чтобы гарантировать, что вещи менее специфичны для модели. Тем не менее, спасибо за помощь. – user101306

+0

Я думаю, что этот вопрос может быть более общим. Я попытался упростить и не получил лучших результатов. Я начал еще один вопрос, чтобы попытаться понять это. – user101306

Смежные вопросы