0

次のドロップダウンリストがあります。

@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`
4

2 に答える 2

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>
于 2016-10-24T13:26:20.463 に答える
0

クライアント側の JavaScript で何かが必要なようです。あなたが欲しいと思うサーバー側のコードは次のとおりです。

@{
  var entity =  Model.OrderCodesList.FirstOrDefault(i => i.OrderCodeId == Model.SelectedOrderCodeId);
  double percentage = 0;

  if (entity != null { percentage = entity.Percentage }
} 

@Html.Hidden("FinancialSupportPercentage", percentage)

値に直接アクセスできるようにするため、非表示を使用しました。通常、HiddenFor はモデルから値を抽出します。

上記のアプローチは、サーバー上ですべてを実行している場合にうまく機能し、その場合は問題なく機能します。しかし、ユーザーがドロップダウンを変更した場合、非表示を変更しますか? その場合、javascript が必要です。

于 2016-10-24T13:26:46.187 に答える