Как получить другое значение из выбранного выпадающего списка

#c# #asp.net #asp.net-mvc #razor

Вопрос:

У меня есть класс проекта

 public class Project
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}
 

затем он отображается с помощью выпадающего списка

 @Html.DropDownListFor(model => model.Id,
    new SelectList(Model.Projects, "Id", "Name", Model.Id),
    "-- Select --",
    new { @class = "form-control" })
 

Если я выберу проект, я могу получить идентификатор и имя, но как получить описание?

 <script>
    $(function () {
        $('#id').change(function () {
            alert('id = '   $('#Id').val()   ', name = '   $('#Id :selected').text()   ', description = '   ???);
        });
    });
</script>
 

Комментарии:

1. Я бы также сгенерировал какой-то атрибут-data — ` для элементов списка выбора, поэтому там, где вы устанавливаете @class , каким-то образом создайте новый -data-description , а затем извлеките его оттуда в своем предупреждении. Я думаю, что DropDownListFor это должно принимать словарь, а также тип анонимного объекта. Таким образом, я бы предположил, что вы можете передать имя data-description как new { data-description = "" } недопустимое c#

2. Я пытаюсь использовать атрибут данных, как это @Html.DropDownListFor(model => model.Id, new SelectList(Model.Projects, "Id", "Name", Model.Id), "-- Select --", new { @class = "form-control", @data_description = ? }) , но я не знаю, как установить data_description, не могли бы вы отправить пример кода?

3. Извините, я не могу дать полный ответ, давно не использовал MVC. Я думаю, что, если мне не изменяет память, вам нужно повторять Model.Projects и создавать new SelectListItem , а не использовать этот new SelectList( подход. Если вы сможете перебирать каждый элемент списка выбора, возможно, тогда вы сможете правильно задать описание.

4. о, я понимаю, спасибо за проницательность

Ответ №1:

Есть два способа

  1. Если список проектов очень велик, вам придется создать API и использовать ajax для получения описания.
  2. В javascript получите список проектов из модели и найдите описание
 <script>

var projects = @Html.Raw(Json.Encode(Model.Projects));
console.log(JSON.stringify(projects)); //only for test
 
$(function () {

        $('#id').change(function () {
 
    let id= $('#Id').val();
    let description = null;
     let name = null;
   
projects.forEach((item) => {
    if (item.Id === id) {
      name= item.Name;
      description= item.Description;
     break;
    }
});
    alert('id = '   id   ', name = '   name   ', description = '   description);
        });
        
  }         
</script>
 

Комментарии:

1. Это тоже работает, спасибо

2. Мы очень рады Вам