从javascript调用asp.net codebehind函数

时间:2012-09-14 13:41:11

标签: javascript webforms code-behind

我有一个名为LinkControl的自定义控件:

<asp:Panel runat="server">
<script language="javascript" type="text/javascript">
    function CheckImage() {
        var str = document.getElementById('<%=lblBookmarkId.ClientID%>').firstChild.nodeValue;
        PageMethods.CodebehindCheckImage(str);
        return false;
    }
</script>
<asp:Label runat="server" ID="lblBookmarkId" Style="visibility: hidden;" />
<asp:Button runat="server" ID="btnCheck" Text="Check" OnClientClick="return CheckImage();"                                        CausesValidation="false""/>
</asp:Panel>

该控件用于转发器内的Page Bookmarks,转发器内的每个控件都有不同的lblBookmarkId.Text值。

Codebehind页面书签具有以下功能:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static bool CodebehindCheckImage(string str)
{
   return true;
}

问题是当我按下按钮btnCheck以查找Repeater中的任何控件时,当我在函数CodebehindCheckImage中调试时,我总是得到包含在Repeater中的最后一个控件中的字符串lblBookmarkId.Text。

欢迎任何建议。

此致 沃伊切赫

1 个答案:

答案 0 :(得分:1)

你可以修改你的javascript函数,如下所示;

    function CheckImage(str) {
        PageMethods.CodebehindCheckImage(str);
        return false;

    }

&安培;更改转发器中的代码以附加onclientClick,如下所示

<asp:Button runat="server" ID="btnCheck" Text="Check" 
 OnClientClick='<%# Eval("BookMarkText", "return CheckImage(\"{0}\");") >

其中&#34; BookMarkText&#34;与书签标签的绑定相同。所以不需要使用隐藏的书签标签。