在跨页回发之前调用javascript OnClientClick处理程序

Calling javascript OnClientClick handler before crosspage postback

本文关键字:javascript 调用 OnClientClick 处理 程序      更新时间:2023-09-26

我是SO的新手,也是ASP.NET的新手。

我有一个带有OnClientClick事件的LinkButton,我想在进行跨页回发之前执行一些代码。

这似乎有效——我可以从下一页中检索值——但是,当我单击"查看"时,HiddenField值被设置为"编辑"。我做了一些测试,似乎所有的javascript函数都被调用了,无论单击哪个按钮。"Edit"是最后一个值集,所以我总是从第二页检索值"Edit"。

Javascript:

function viewfunc(control) {
    <% hidden.Value = "View"; %>
    <% hiddenpanel.Update(); %>
    return true;
}
function editfunc(control) {
    <% hidden.Value = "Edit"; %>
    <% hiddenpanel.Update(); %>
    return true;
}

形式:

<form id="form1" runat="server">
<asp:UpdatePanel runat="server" ID="up1" UpdateMode="Conditional">
        <ContentTemplate>
    <asp:Panel ID="Panel1" runat="server">
        <asp:GridView Id="gridview1" runat="server" AllowPaging="True">
        <Columns>
            // Data fields here...
        <asp:TemplateField>
              <ItemTemplate>
                        <asp:LinkButton ID="viewlabel" runat="server" Text="View" OnClientClick="if(!viewfunc(this)) return false;" PostBackURL="~/NextPage.aspx"></asp:LinkButton>
              </ItemTemplate>
                </asp:TemplateField>
              <asp:TemplateField>
              <ItemTemplate>
                        <asp:LinkButton ID="editlabel" runat="server" Text="Edit" OnClientClick="if(!editfunc(this)) return false;" PostBackURL="~/NextPage.aspx"></asp:LinkButton>
              </ItemTemplate>
              </asp:TemplateField>
        </Columns>  
        </asp:GridView>
    </asp:Panel>    
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel runat="server" ID="hiddenpanel" UpdateMode="Conditional">
        <ContentTemplate>
        <asp:Panel runat="server">
            <asp:HiddenField runat="server" Id='hidden' Value='Empty' />
        </asp:Panel>
        </ContentTemplate>
</asp:UpdatePanel>
</form>  

注意:我更喜欢将这些函数作为代码绑定函数调用,但我找不到在点击事件之后但在回发之前执行代码绑定的方法。

感谢您的任何建议!

请尝试以下操作:

function viewfunc(control) {
    document.getElementById('<% hidden.ClientID %>').value = "View";
    return true;
}

function editfunc(control) {
    document.getElementById('<% hidden.ClientID %>').value = "Edit";
    return true;
}

这些应该会更新您的隐藏字段,然后触发updatepanel更新事件。

当你有类似<% hidden.Value = "View"; %>的东西时,它只会运行,Asp.net不会在意它在javascript函数中。我认为你不需要在函数完成后告诉UpdatePanel"更新",我认为如果你不这样做,它应该可以正常工作。