如何顽固地将旧的JavaScript事件处理程序保留在Web表单页面中,并将其移植到ASP.NET MVC?
考虑.ASPX文件中的一行标记,如下所示:如何顽固地将旧的JavaScript事件处理程序保留在Web表单页面中,并将其移植到ASP.NET MVC?,javascript,asp.net-mvc,event-handling,porting,Javascript,Asp.net Mvc,Event Handling,Porting,考虑.ASPX文件中的一行标记,如下所示: <asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="javascript: document.getElementById('txtPayAmount').value = document.getElementById('drpdownPayPlan').value.replace(',', '');"> 0x800a138f-JavaScript运行时错误:无法
<asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="javascript: document.getElementById('txtPayAmount').value = document.getElementById('drpdownPayPlan').value.replace(',', '');">
0x800a138f-JavaScript运行时错误:无法获取属性“value”
指未定义的或空的引用
在呈现时,源代码在第410行实际读取如下内容(我理解名称损坏的原因):
所以,恕我直言,我没有给我讲道如何正确地将WebForms项目移植到MVC(很抱歉听起来像一个叛逆和不合作的青少年!)--如何解决这一行标记的问题?在尝试分配服务器端控件名(由于默认的服务器控件行为分配AutoID
)而不是客户端名称时,ASPX页面中经常出现0x800a138f
错误,因此document.getElementById('drpdownPayPlan')
返回undefined
有两种解决方法:
将ClientIDMode=“Static”
分配给涉及的每个服务器控件(我假设txtPayAmount
是一个TextBox
服务器控件,如果您使用的是文本输入文本框,请保持txtPayAmount
不变)
注意,我建议您在函数中将JS部分与服务器控件分离,并调用函数名,如下所示:
<asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="changePayAmount();">
<script type="text/javascript">
function changePayAmount() {
document.getElementById('<%= txtPayAmount.ClientID %>').value = document.getElementById('<%= drpdownPayPlan.ClientID %>').value.replace(',', '');
}
</script>
类似问题:
谢谢你,@Tetsuya Yamamoto!你的第一个选择成功了!在发布问题之前,我自己也尝试过第二种选择,因为我只知道这一点,但这不会改变结果。然而,正如您所建议的,将clientdmode=“Static”分配给涉及的每个服务器控件确实解决了我的问题!我在txtPayAmount控制标签和drpdownPayPlan上都设置了该属性。瞧!多莫·阿里加托·戈扎伊马苏!
<asp:TextBox ID="txtPayAmount" runat="server" ClientIDMode="Static" />
<asp:DropDownList ID="drpdownPayPlan" runat="server" ClientIDMode="Static" onchange="javascript: document.getElementById('txtPayAmount').value = document.getElementById('drpdownPayPlan').value.replace(',', '');">
<asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="javascript: document.getElementById('<%= txtPayAmount.ClientID %>').value = document.getElementById('<%= drpdownPayPlan.ClientID %>').value.replace(',', '');">
<asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="changePayAmount();">
<script type="text/javascript">
function changePayAmount() {
document.getElementById('<%= txtPayAmount.ClientID %>').value = document.getElementById('<%= drpdownPayPlan.ClientID %>').value.replace(',', '');
}
</script>
@Html.DropDownListFor(model => model.PayPlan, Model.PayPlanList as SelectList, new { id = "drpdownPayPlan" })