我有一个div标签,它有一个click事件,而我试图调用的方法来自代码隐藏。
这是我的div标签
<div class="DivA" runat="server" id="ThisDiv" onclick="<%ClickMe();%>"></div>
方法很简单
public void ClickMe()
{
Response.Redirect("www.google.ca");
}
在我添加真实内容之前,我只是在测试它。它抛出的错误是......
JavaScript critical error at line 16, column 49 in http://localhost:24307/DIVPAGE.aspx
SCRIPT1002: Syntax error
这是它给我的线
<div id="ThisDiv" class="DivA" onclick="<%ClickMe();%>"></div>
我尝试过更改
<%ClickMe();%>
到
<%=ClickMe()%>
但是这会引发同样的错误。另一件我不明白的事情是当你看到错误的行,它缺少runat标签,并在onclick事件中添加了其他字符。
由于
答案 0 :(得分:1)
你有一个概念问题,这样做,测试它会起作用:
<asp:LinkButton id="lbClickMe" runat="server" OnClick="ClickMe">
<div class="DivA" id="ThisDiv">
The Click Me Button!
</div>
</asp:LinkButton>
就是这样,当指定runat = server时,ASP.NET页面解析器会将元素作为服务器端处理,因此对于此元素/控件,除了控件模板内的数据绑定标记外,不允许标记中的服务器标记。因此,要调用方法,您必须将runat服务器放在具有Click事件的控件上,这就是LinkButton的情况,在他内部,您可以将div放入UI的某些特定样式。
同样不是这样,如果你真的希望你的div表现得那样,那么复杂的简单就没有问题,但在这种情况下请改为:
<asp:LinkButton id="lbClickMe" runat="server" OnClick="ClickMe" Visible="False"></asp:LinkButton>
<div class="DivA" id="ThisDiv" onclick="<%= Page.GetPostBackEventReference(lbClickMe) %>"></div>
GetPostBackEventReference会提取模拟链接按钮点击所需的javascript代码,但如果可以,请再次使用链接按钮。
希望它有所帮助,
问候。
答案 1 :(得分:0)
您无法像这样从DOM调用服务器端C#方法。您只能在HTMLElement的onclick
处理程序中调用JavaScript函数。
使用模板语言调用服务器端方法是正确的,但这将在呈现页面时执行;例如,您可以呈现该服务器端方法的结果,但不能将服务器端方法用作客户端事件的处理程序。 DOM元素上的onclick事件只能调用JavaScript函数。
ASP网页控件也有一个OnClick
事件属性,这可能让你感到困惑;这与DOM元素上的onclick事件属性不同(ASP将为其Web控件创建其他代码,例如在asp:按钮的情况下)。这可以使用ViewState和回发到服务器。但是,DOM元素的onclick
事件不会为您做这些事情。
添加runat="server"
会将您的元素转换为ASP控件,但它只是一个HtmlControl。对于<div>
,它将是HtmlGenericControl,它只是简单地写出元素的onclick
属性。
答案 2 :(得分:0)
<%= %>
语法会发出一个字符串,它不会执行任何内容,例如重定向。
您需要使用此javascript重定向客户端:
window.location = 'http://my.url.com';
如果您需要与服务器端代码进行交互,则需要使用AJAX与Web服务进行通信以获取所需的URL,然后执行上述重定向。
<强>更新强>
抱歉小伙子,大脑冻结。
是的,确实,您可以注入一个将被评估为单击处理程序的字符串,但处理程序必须是javascript函数,而不是服务器端函数!呈现页面后,除了与Web服务进行通信之外,它不再与服务器交互(或者如果我们想要获得技术,Web套接字)。