Установите значение ‘HiddenFor’ в значение выбранного выпадающего списка

#.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