为什么单选按钮没有传递asp控件的clientID

时间:2015-12-23 13:02:35

标签: javascript c# jquery asp.net webforms

IDE:VS 2012

设计师代码
场景1:使用runat =" server" (这是必要的),javascript函数不起作用

<asp:TextBox ID="txtCost" runat="server"  ReadOnly="true" Text="250/-"></asp:TextBox>  


 <input type="radio"  name="myRadios" runat="server"  id="rb1" checked="true" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID %>');" value="1" /> Monthly
        <input type="radio"  name="myRadios" runat="server"  id="rb2" value="2" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID%>');" /> Weekly    

场景2:runat =&#34;服务器&#34;删除(这是必需的),javascript函数工作。

<asp:TextBox ID="txtCost" runat="server"  ReadOnly="true" Text="250/-"></asp:TextBox>  


 <input type="radio"  name="myRadios"   id="rb1" checked="true" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID %>');" value="1" /> Monthly
        <input type="radio"  name="myRadios"   id="rb2" value="2" onchange="javascript:UpdateClick(this,'<%=txtCost.ClientID%>');" /> Weekly  

Javascript功能:

function UpdateClick(myRadio, ClientID) {

        currentValue = myRadio.value;
        if (currentValue == '1') {
            var txtCostBox = document.getElementById(ClientID);
            txtCostBox.value = '250/-';
        }
        else {
            var txtCostBox = document.getElementById(ClientID);
            txtCostBox.value = '600/-';

        }
        return false;
    }  

问题:

所以当我删除runat =&#34; server&#34;在单选按钮中,代码正常工作,当我保持runat =&#34; server&#34;时,我没有获得实际的客户端ID,而是获取客户端ID:

'<%=txtCost.ClientID%>'  

我有一个要求,我需要使用runat =&#34; server&#34;来保持单选按钮,你能告诉我如何修复上述问题。

4 个答案:

答案 0 :(得分:0)

runat服务器意味着runat服务器,javascript是客户端。如果您正在使用asp控件,那么将需要runat服务器。当您使用类型为无线电跑道服务器的HTML输入时不起作用。

替代:

{{1}}

答案 1 :(得分:0)

您可以在onclick

中放置代码Page_Load
rb1.Attributes["onclick"] = "javascript:UpdateClick(this,'" + txtCost.ClientID + "')";
rb2.Attributes["onclick"] = "javascript:UpdateClick(this,'" + txtCost.ClientID + "');"

另外,请尝试将"<%=txtCost.ClientID %>"更改为:"<%# txtCost.ClientID %>"

还有其他一些方法可以做到这一点。您也可以更改您的代码:

function UpdateClick(myRadio) {

   var textObj = document.getElemmentById("<%# txtCost.ClientID %>");
   ...
}

答案 2 :(得分:0)

将radiobutton中的onchange调用更改为如下所示

 <input type="radio"  name="myRadios" runat="server"  id="rb1" checked="true" onchange="javascript:UpdateClick(this);" value="1" /> Monthly
    <input type="radio"  name="myRadios" runat="server"  id="rb2" value="2" onchange="javascript:UpdateClick(this);" /> Weekly    

和你的javascript函数

function UpdateClick(myRadio) {
        currentValue = myRadio.value;
        if (currentValue == '1') {
            $('#<%=txtCost.ClientID%>').val('250/-');
        }
        else {
            $('#<%=txtCost.ClientID%>').val('600/-');

        }
        return false;
    }

答案 3 :(得分:0)

如果您在用户控件上显示此文本框,或者在使用母版页的页面中显示此文本框,则表明您未使用runat = server获取该ID。

将文本框的客户端ID模式更改为“静态”。

<asp:TextBox ID="txtCost" runat="server" ClientIDMode="Static"  ReadOnly="true" Text="250/-"></asp:TextBox>

如果没有静态,ID就像textCost $ 1000blabla ......

如果您想要动态id与静态,请从服务器端生成该javascript(使用C#txtCost.GetClientID()),您将拥有完整的客户端ID。