Выбор элементов Enum при вызове AJAX

90
11

Я работаю над результатом действия, которое возвращает данные JSON для просмотра, а затем загружает текстовые поля по вызову AJAX

Действие:

public ActionResult loadInf(string custm)
{
int smclientbranchid = Convert.ToInt32(Session["smclientbranchid"]);
var query = (from parent in db.Customer
join child in db.CustomerAddress on parent.CustomerId equals child.CustomerId
where parent.SMClientBranchId == smclientbranchid && parent.NIC == custm
select new SalesVM
{
Indicator = parent.Indicator,
//code removed
}).ToList();
return Json(query);
}

Ввиду:

@Html.DropDownListFor(model => model.Indicator, 
new SelectList(Enum.GetValues(typeof(ColorTypes))),
"<Select>",
new { @class = "form-control", id ="Indicator" })

<script type="text/javascript">
$(document).ready(function () {
$("#btnSearchCus").click(function () {
var custm = $('#custm').val();
$.ajax({
cashe: 'false',
type: "POST",
data: { "custm": custm },
url: '@Url.Action("LoadCustomerInfo", "Sales")',
dataType: 'json', // add this line
"success": function (data) {
if (data != null) {
var vdata = data;
$("#Indicator").val(vdata[0].Indicator);
//code removed
}
}
});
});
});
</script>

Я получаю данные правильно, а также загружает право, за исключением поля "Индикатор", которое имеет тип enum.

Как я могу выбрать элемент списка перечислений из данных, которые я получаю.

Например:

0,1,2,3 индексный порядок

спросил(а) 2015-04-16T10:39:00+03:00 5 лет, 5 месяцев назад
1
Решение
57

Вам нужно настроить атрибуты Value всех значений option для списка выбора.

В раскрывающемся списке выберите следующее текстовое представление значения:

@Html.DropDownListFor(model => model.Indicator, Enum.GetValues(typeof(ColorTypes)).Cast<ColorTypes>().Select(x => new SelectListItem { Text = x.ToString(), Value = x.ToString() }), new { @class = "form-control", id = "Indicator" })

Или используйте для выбора по integer значению следующее:

@Html.DropDownListFor(model => model.Indicator, Enum.GetValues(typeof(ColorTypes)).Cast<ColorTypes>().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }), new { @class = "form-control", id = "Indicator" })

Это позволит вашему .Val() jQuery выбрать правильный.

ответил(а) 2015-04-16T11:09:00+03:00 5 лет, 5 месяцев назад
56

Если вы извлекаете строковую переменную nm (0,1,2,3...) - было бы лучше изменить тип на int и попытаться применить целую переменную к типу Enum который у вас есть.

public ActionResult loadInf(int nm)
{
ColorTypes enumValue = (ColorTypes) nm;
.......

Вы можете ознакомиться с деталями этой статьи: http://www.jarloo.com/convert-an-int-or-string-to-an-enum/

ответил(а) 2015-04-16T10:52:00+03:00 5 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема