通貨を選択するためのドロップダウン/コンボボックスを含むテーブル行を含むエディター テンプレートがあります。この編集テンプレートは同じビューに何度も表示され、ユーザーはこれらの行を何度でも追加できます。
行のドロップダウンの変更を同じ行の 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; のようなものにどのようにアクセスできますか? 私がそのようにしたら?
前もって感謝します :)