0

通貨を選択するためのドロップダウン/コンボボックスを含むテーブル行を含むエディター テンプレートがあります。この編集テンプレートは同じビューに何度も表示され、ユーザーはこれらの行を何度でも追加できます。

行のドロップダウンの変更を同じ行の EditorFor (通貨のレート) に反映させたいので、onchange html パラメーターを追加しました。

<td>
    @*@Html.LabelFor(model => model.Currency)*@
    @Html.DropDownListFor(model => model.Currency, new SelectList(Model.CurrencyList, "Code", "Code"), new { onchange = "updateCurrency(this)" })
    @Html.ValidationMessageFor(model => model.Currency)
</td>

私の JavaScript 関数は、選択した通貨のレートを取得するために ajax 呼び出しを行います。

function updateCurrency(elem) {
        alert("Currency changed!")
        $.ajax({
            type: "GET",
            url: "Currency?code=" + elem.value,
            success: function (msg) {
                // The Rate field's Id:
                var RateId = "@Html.ClientIdFor(model=>model.Rate)" //  // Halp, problem is here!
                document.getElementById(RateId).value = msg;

            }
        });
    }

私の問題はそれです

var RateId = "@Html.ClientIdFor(model=>model.Rate)"

サーバー側コードである Html ヘルパーがあります。そのため、ページのソース コードを表示すると、JavaScript コードが複製され (行ごとに 1 回)、すべての var RateId = "@Html.ClientIdFor(model=>model.Rate)" が最後に追加された列の EditorFor を指しています。

おそらく問題を解決しようとする私の方法は間違っていますが、JavaScript コードを取得して目的のフィールド (つまり、変更されたドロップダウン リストと同じ行のフィールド) を更新するにはどうすればよいでしょうか。

問題の 1 つは、エディター テンプレートに javasript があることだと思いますが、document.getElementById(RateId).value = msg; のようなものにどのようにアクセスできますか? 私がそのようにしたら?

前もって感謝します :)

4

1 に答える 1

0

理解した。それが誰かに役立つことを願っています:

私からしてみれば:

@Html.DropDownListFor(model => model.Currency, new SelectList(Model.CurrencyList, "Code", "Code"), new { @onchange = "updateCurrency(this, " + @Html.IdFor(m => m.Rate) + ", " + @Html.IdFor(m => m.Amount) + ", " + @Html.IdFor(m => m.Total) + ")" })

別の JavaScript ファイルで:

function updateCurrency(elem, RateId, AmountId, TotalId) {

   var cell = elem.parentNode // to get the <td> where the dropdown was

   var index = rowindex(cell) // get the row number

   // Request the currency's rate:
   $.ajax({

      blah blah blah .........
      (RateId[index - 1]).value = 'retreived value'; // Set the rate field value.

   });

}

これまでのところ機能しているようです。

于 2013-01-23T09:16:11.897 に答える