将.Net控件值传递给javascript函数

将.Net控件值传递给javascript函数,javascript,jquery,asp.net,function,Javascript,Jquery,Asp.net,Function,我试图根据单击的按钮向javascript函数传递不同的值 我在页面上有两个隐藏字段,我希望单击btnA时使用第一个字段hidA的值,单击btnB时使用第二个字段hidB的值 然后,javascipt将读取该值 示例 onclick="test(22);" 但是,我无法在不破坏语法的情况下读取.Net控件值 ASPX <input id="btnA" type="button" value="A" onclick="test($('#<%= hidA.ClientID%>')

我试图根据单击的按钮向javascript函数传递不同的值


我在页面上有两个隐藏字段,我希望单击
btnA
时使用第一个字段
hidA
的值,单击
btnB
时使用第二个字段
hidB
的值

然后,javascipt将读取该值

示例

onclick="test(22);"
但是,我无法在不破坏语法的情况下读取.Net控件值

ASPX

<input id="btnA" type="button" value="A" onclick="test($('#<%= hidA.ClientID%>').val());"/>
<input id="btnB" type="button" value="B" onclick="test($('#<%= hidB.ClientID%>').val());"/>    
问题


如何将ASP.NET控件值传递给javascript函数?

最简单的方法是在隐藏字段中将ClientIDMode设置为static,并在测试变量中发布“a”或“B”。像这样:

<input id="btnA" type="button" value="A" onclick="test('A');"/>

然后在测试方法中,从该隐藏控件(而不是调用本身)获取值:

$(“#hid”+参数值).val()


这是一个选择。但是,通过这种方式,您仅限于推送到客户端的控件。但是,由于您已经在原始请求中创建了隐藏控件,我认为这不会是一个问题。

最简单的方法是在隐藏字段中将clientdmode设置为static,并在测试变量中发布“A”或“B”。像这样:

<input id="btnA" type="button" value="A" onclick="test('A');"/>

然后在测试方法中,从该隐藏控件(而不是调用本身)获取值:

$(“#hid”+参数值).val()


这是一个选择。但是,通过这种方式,您仅限于推送到客户端的控件。但是,由于您已经在原始请求中创建了隐藏控件,我认为这不会成为问题。

您是否考虑过将单击事件移出控件

<input id="btnA" type="button" value="A" cssClass="btnA hidBtn" />
<input id="btnB" type="button" value="B" cssClass="btnB hidBtn" />

<script type="text/javascript">
      jQuery(function($) {
           $(".btnA").click(function() {
               test($("#<%= hidA.ClientID %>").val());
           });
           $(".btnB").click(function() {
               test($("#<%= hidB.ClientID %>").val());
           });

           // Or you could try something like this
           $(".hidBtn").click(function() {
              var hidId = "#"+this.id.replace("btn","hid");
              test($(hidId).val());
           });
      });
</script>

jQuery(函数($){
$(“.btnA”)。单击(函数(){
测试($(“#”)val();
});
$(“.btnB”)。单击(函数(){
测试($(“#”)val();
});
//或者你可以试试这样的
$(“.hidBtn”)。单击(函数(){
var hidId=“#”+此.id.replace(“btn”、“hid”);
测试($(hidId.val());
});
});

您是否考虑过将点击事件移出控制

<input id="btnA" type="button" value="A" cssClass="btnA hidBtn" />
<input id="btnB" type="button" value="B" cssClass="btnB hidBtn" />

<script type="text/javascript">
      jQuery(function($) {
           $(".btnA").click(function() {
               test($("#<%= hidA.ClientID %>").val());
           });
           $(".btnB").click(function() {
               test($("#<%= hidB.ClientID %>").val());
           });

           // Or you could try something like this
           $(".hidBtn").click(function() {
              var hidId = "#"+this.id.replace("btn","hid");
              test($(hidId).val());
           });
      });
</script>

jQuery(函数($){
$(“.btnA”)。单击(函数(){
测试($(“#”)val();
});
$(“.btnB”)。单击(函数(){
测试($(“#”)val();
});
//或者你可以试试这样的
$(“.hidBtn”)。单击(函数(){
var hidId=“#”+此.id.replace(“btn”、“hid”);
测试($(hidId.val());
});
});

您可以在服务器端添加
onclick
属性,例如

protected void Page_Load(object sender, EventArgs e)
{
    btnA.Attributes.Add("onclick", "test($(" + hidA.ClientID + ").val());");
    btnB.Attributes.Add("onclick", "test($(" + hidB.ClientID + ").val());");                
}
当然,前提是两个
input
元素都在.aspx中正确设置了
runat
属性:

<input id="btnA" type="button" value="A" runat="server"  />
<input id="btnB" type="button" value="B" runat="server" /> 

以上内容将以下html发送回客户端:

<input type="hidden" name="hidA" id="hidA" value="22" />
<input type="hidden" name="hidB" id="hidB" value="33" />        

<input name="btnA" type="button" id="btnA" value="A" onclick="test($(hidA).val());" />
<input name="btnB" type="button" id="btnB" value="B" onclick="test($(hidB).val());" /> 


我认为这是理想的输出。

您可以在服务器端添加
onclick
属性,例如

protected void Page_Load(object sender, EventArgs e)
{
    btnA.Attributes.Add("onclick", "test($(" + hidA.ClientID + ").val());");
    btnB.Attributes.Add("onclick", "test($(" + hidB.ClientID + ").val());");                
}
当然,前提是两个
input
元素都在.aspx中正确设置了
runat
属性:

<input id="btnA" type="button" value="A" runat="server"  />
<input id="btnB" type="button" value="B" runat="server" /> 

以上内容将以下html发送回客户端:

<input type="hidden" name="hidA" id="hidA" value="22" />
<input type="hidden" name="hidB" id="hidB" value="33" />        

<input name="btnA" type="button" id="btnA" value="A" onclick="test($(hidA).val());" />
<input name="btnB" type="button" id="btnB" value="B" onclick="test($(hidB).val());" /> 


我认为这是理想的输出。

如果您看到的是客户端的
标记,那么这并不是真正的语法问题,而是ASP.NET根本没有在服务器端处理页面。它只是按原样传递给客户端,就像标准HTML一样。如果不是这样,那么我可能误解了你的问题,你能澄清一下吗?你想做什么?您想要ClientID(从.NET实际生成的ID)还是“一些”要在DOM中使用的来自代码隐藏的ID?以这种方式使用.net控件的问题是,撇号过早地结束了字符串。我在页面上有两个隐藏字段,我希望在单击按钮A时使用第一个字段的值,在单击按钮B时使用第二个字段的值。@Leon我想获取asp:hiddenfield。如果您在客户端看到
标记,那么这实际上不是语法问题,而是asp.NET根本没有在服务器端处理页面。它只是按原样传递给客户端,就像标准HTML一样。如果不是这样,那么我可能误解了你的问题,你能澄清一下吗?你想做什么?您想要ClientID(从.NET实际生成的ID)还是“一些”要在DOM中使用的来自代码隐藏的ID?以这种方式使用.net控件的问题是,撇号过早地结束了字符串。我在页面上有两个隐藏字段,我希望在单击按钮A时使用第一个字段的值,在单击按钮B时使用第二个字段的值。@Leon我想获取asp:hiddenfield。是的,我现在就是这样做的,但事实上,没有两个按钮和两个hiddenfield,只有十个。出现这个问题是因为我试图将所有的点击事件合并成一个较小的函数。谢谢你的回答。你也可以使用$=选择器来查找值,或者像Leon提到的那样使id为静态。是的,这就是我目前的做法,但事实上,没有两个按钮和两个隐藏字段,只有十个。出现这个问题是因为我试图将所有的点击事件合并成一个较小的函数。谢谢你的回答。你也可以使用$=选择器来查找值或使id为Leon提到的静态。这是我正在考虑的替代和首选方法,但在构建字符串时遇到了类似的问题。这是我正在考虑的替代和首选方法,但我遇到了一个问题相似问题