从标记调用codebehind方法并抛出javascript错误

时间:2013-12-29 23:38:58

标签: c# asp.net webforms

我有一个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="&lt;%ClickMe();%>"></div>

我尝试过更改

 <%ClickMe();%> 

 <%=ClickMe()%>

但是这会引发同样的错误。另一件我不明白的事情是当你看到错误的行,它缺少runat标签,并在onclick事件中添加了其他字符。

由于

3 个答案:

答案 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事件的控件上,这就是LinkBut​​ton的情况,在他内部,您可以将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套接字)。