如何将HTML链接(锚)像LinkButton一样进行Postback?

11
我想问如何使一个 HTML 锚点(a 元素)或任何对象执行一个 postback 或者执行服务器端的方法?我想要创建一个自定义的按钮(由一些 div 包裹的 a 元素来实现一些自定义样式),并且我想让它的 OnClick 看起来像 ASP.NET 的 LinkButton。
<a href="#" onclick="RunServerSideMethod()">Just a simple link button</a>

2
嗯,我再也不想回到ASP.NET Webforms了,MVC万岁 :) - Ropstah
1
当然,MVC是一种新的好解决方案,但WebForms仍然被使用,至少对于旧项目(在MVC发布之前)。 - Ahmed Magdy
6个回答

14

使用服务器端HTML控件,HtmlAnchor,它是一个服务器端的超链接标签。

<asp:HtmlAnchor runat="server" onclick="RunServerSideMethod">Just a simple link</asp:HtmlAnchor>

这个错误信息是“HtmlAnchor不是已知元素”。 - Bengi Besçeli

10

默认情况下,控件使用 __doPostBack 来向服务器进行回传(postback)。__doPostBack 方法需要传入控件的 UniqueID (或者在HTML中是HTML元素的name属性)作为第一个参数,第二个参数是要触发的命令的名称。

因此,对于自定义按钮,将其呈现到输出流(render to the output stream)中:

<a id="someclientid" name="someuniqueid" href="javascript:void(0);" onclick="__doPostBack('someuniqueid', '');">val</a>
在您的自定义按钮中,添加IPostBackEventHandler,并且这个__doPostBack语句会自动地为您触发它的RaisePostBackEvent方法。

很好,但我应该从哪里定义要运行的方法名称?或者这应该在 IPostBackEventHandler 实现中吗? - Ahmed Magdy
你可以手动调用你想要的方法,或者使用反射来动态调用它。你完全掌控实现过程,可以做任何想做的事情。 - Brian Mains

5
只需添加一个锚标签--> runat="server" onServerClick="您的函数名称",即可解决您的问题。

这就是我会使用的。 - Johnn5er
这个解决了我的问题。看起来我的版本的asp.net没有HtmlAnchor(或者我不知道如何导入它),制作一个自定义按钮在我看来有点过度设计了。 - Circle Hsiao

1
一个解决方法可能是:
在锚标签的客户端事件中调用dummyButton的点击事件 - 这将默认调用此dummyButton的服务器端事件。因此,如果您将服务器端代码放在此dummyButton的服务器端事件中 - 调用锚标签的客户端事件将调用此服务器端dummy button事件。

代码:

<a id="ancLink" href="javascript:void(0);" >back</a>

<asp:Button ID="dummyRefresh" runat="server" OnClick="BtnRefreshOnclick" style="display:none"/>

Javascript:

ancLink.live("click", function () {
         callDummyButtonServerEvent();
    });

function callDummyButtonServerEvent() {

    $('input[id$=dummyRefresh]').click();   

}

0
您也可以在HTML代码中嵌入以下ASP代码。
<a id="someclientid" name="someuniqueid" href="javascript:void(0);" onclick="<% YourASPMethod(); %>">val</a>

这将在 aspx.cs 文件中执行一个名为 YourASPMethod() 的方法。


0

如果不依赖于ASP.NET,RunServerSideMethod()应该是一个使用Ajax向服务器发送请求的javascript函数。

可以尝试这个Ajax教程:http://www.w3schools.com/ajax/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接