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

时间:2013-07-29 14:32:41

标签: javascript asp.net

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

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

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

使用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>  

注意:我宁愿将这些函数称为代码隐藏函数,但是我找不到在click事件之后但在回发之前执行代码隐藏的方法。

感谢您提出的所有建议!

1 个答案:

答案 0 :(得分:0)

请尝试以下方法:

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'更新',我想如果你不假设它,它应该正常工作。