将"隐藏"值设置为选定的下拉列表值



我有以下下拉列表:

@Html.DropDownListFor(m => m.SelectedOrderCodeId, new SelectList(Model.OrderCodesList, "OrderCodeId", "DisplayString"))

现在OrderCodesList有:OrderCodeId, DisplayString &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`

有一个简单的方法:

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);
}
<<p> 视图/strong>
@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>

听起来您可能需要一些客户端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通常从模型中提取值。

如果您在服务器上执行所有操作,那么上面的方法工作得很好,如果是这种情况,那么这将工作得很好。但是如果用户改变了下拉菜单,你希望隐藏的改变吗?

最新更新