我是SO的新手,也是ASP.NET的新手。
我有一个带有OnClientClick事件的LinkButton,我想在执行跨页回发之前执行一些代码。
这似乎有效 - 我可以从下一页检索值 - 但是,当我点击“查看”时,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事件之后但在回发之前执行代码隐藏的方法。
感谢您提出的所有建议!
答案 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
'更新',我想如果你不假设它,它应该正常工作。