我有一个编辑器模板,其中包含一个表格行,其中包含(除其他外)一个下拉/组合框来选择一种货币。此编辑模板在同一个视图上显示多次,用户可以根据需要多次添加这些行。
我希望行的下拉列表中的更改反映在同一行的 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 代码(每行一次),并且所有 var RateId = "@Html.ClientIdFor(model=>model.Rate)" 都指向最近添加的列的 EditorFor。
可能我尝试解决问题的方式是错误的,但是我怎样才能让我的 javascript 代码更新所需的字段(即与更改的下拉列表位于同一行的字段)。
我相信问题之一是我在编辑器模板上有 javasript,但我怎么能访问像 document.getElementById(RateId).value = msg; 这样的东西。如果我那样做?
提前致谢 :)