#.net #asp.net-mvc #html.dropdownlistfor #html.hiddenfor
#.net #asp.net-mvc #html.dropdownlistfor #html.hiddenfor
Вопрос:
У меня есть следующий выпадающий список:
@Html.DropDownListFor(m => m.SelectedOrderCodeId, new SelectList(Model.OrderCodesList, "OrderCodeId", "DisplayString"))
Теперь OrderCodesList
имеет следующее: OrderCodeId
, DisplayString
amp; Percentage
Как я могу установить HiddenFor
значение, равное Percentage
значению, выбранному из этого выпадающего списка? (Приведенный ниже код должен быть полным в соответствии с псевдо, потому что я не уверен, что делать дальше — если это вообще возможно).
@Html.HiddenFor(m => m.FinancialSupportPercentage, new { @Value = Model.OrderCodesList.Where
псевдо:
OrderCodesList.Select 'Percentage'
Where
'OrderCodeId'
is the `Selected 'OrderCodeId` from the `DropDownListFor`
Комментарии:
1. Вы можете использовать jquery и Ajax. Для события onchange в выпадающем списке получите идентификатор и получите процент для этого идентификатора.
2.
DropDownListFor()
Метод генерирует параметры только сvalue
атрибутом (и отображаемым текстом). Если вам нужно значение дополнительного свойства, вам нужно будет использовать ajax для вызова серверного метода и получения его на основе выбранного значения. Но это было бы немного бессмысленно — вы также можете просто получить его в методе POST при отправке формы.
Ответ №1:
Вот простой способ:
Класс
public class Order
{
public int OrderCodeId { get; set; }
public string DisplayString { get; set; }
public int Percentage { get; set; }
}
Контроллер
public JsonResult GetPercentage(int OrderCodeId)
{
var data = _dbContext.List
.FirstOrDefault(p => p.OrderCodeId == OrderCodeId)
.Percentage;
return Json(data, JsonRequestBehaviour.AllowGet);
}
Вид
@Html.DropDownListFor(m => m.SelectedOrderCodeId, new SelectList(Model.OrderCodesList, "OrderCodeId", "DisplayString"))
@Html.HiddenFor(m => m.FinancialSupportPercentage)
<scripts>
$('#SelectedOrderCodeId').on('change', function () {
var selectedIndex = $(this).val();
$.ajax({
url: '/ControllerName/GetPercentage',
data: { OrderCodeId: selectedIndex },
method: 'GET',
success: function (result) {
$('FinancialSupportPercentage').val(result);
}
});
});
</scripts>
Ответ №2:
Похоже, вам может понадобиться что-то на JavaScript на стороне клиента. Серверный код, который, я думаю, вам нужен, это:
@{
var entity = Model.OrderCodesList.FirstOrDefault(i => i.OrderCodeId == Model.SelectedOrderCodeId);
double percentage = 0;
if (entity != null { percentage = entity.Percentage }
}
@Html.Hidden("FinancialSupportPercentage", percentage)
Я использовал hidden, поскольку это дает вам прямой доступ к значению; HiddenFor обычно извлекает значение из модели.
Описанный выше подход хорошо работает, если вы все делали на сервере, и если это так, то это будет работать нормально. Но если пользователь изменит выпадающий список, вы хотите, чтобы значение hidden изменилось? Если вы это сделаете, вам понадобится javascript.
Комментарии:
1. Я получаю неожиданное число в ‘двойном проценте;’
2. Что именно такое ‘процент’? Для меня это модель. FinancialSupportPercentage