#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:
Есть два способа
- Если список проектов очень велик, вам придется создать API и использовать ajax для получения описания.
- В 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. Мы очень рады Вам