簡體   English   中英

從標記中調用codebehind方法並拋出javascript錯誤

[英]Calling codebehind method from markup and is throwing javascript error

我有一個帶有click事件的div標記,而我嘗試調用的方法來自后台代碼。

這是我的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事件添加了其他字符。

謝謝

您在這里有一個概念問題,請執行此操作,然后測試它是否可以工作:

<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代碼,但如果可以的話,最好還是直接使用鏈接按鈕。

希望能幫助到你,

問候。

您不能像這樣從DOM調用服務器端C#方法。 您只能在HTMLElement的onclick處理程序中調用JavaScript函數。

可以使用模板語言調用服務器端方法是正確的,但是這將在呈現頁面時執行。 例如,您可以呈現該服務器端方法的結果,但不能將服務器端方法用作客戶端事件的處理程序。 DOM元素上的onclick事件只能調用JavaScript函數。

ASP Web控件還具有OnClick事件屬性,這可能會讓您感到困惑。 這與DOM元素上的onclick事件屬性不同(ASP將為其Web控件創建其他代碼,例如,在asp:button的情況下)。 使用ViewState和回發到服務器可以正常工作。 但是,DOM元素的onclick事件不會為您做這些事情。

添加runat="server"會將您的元素轉換為ASP控件,但是它只會是HtmlControl。 <div>的情況下,它將是HtmlGenericControl ,它只是按原樣寫出元素的onclick屬性。

<%= %>語法發出一個字符串,它不執行任何操作,如重定向。

您需要使用以下javascript進行重定向客戶端:

  window.location = 'http://my.url.com';

如果需要與服務器端代碼進行交互,則需要通過AJAX與Web服務進行通信來獲取所需的URL,然后執行上述重定向。

更新

對不起小伙子們,大腦凍結了。

是的,的確,您可以注入一個將被視為單擊處理程序的字符串,但是該處理程序必須是javascript函數,而不是服務器端函數! 呈現頁面后,除了與Web服務進行通信(或者,如果我們也想獲得技術知識,也需要Web套接字)進行通信時,它就無法與服務器交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM