【问题标题】:Adding OnClick event to ASP.NET control将 OnClick 事件添加到 ASP.NET 控件
【发布时间】:2012-06-09 05:46:34
【问题描述】:

我想为我的panel 创建OnClick 事件。到目前为止,大多数谷歌搜索结果或多或少是这样的:adding onclick event to aspnet label。有什么方法可以从 javascript 或面板属性调用代码隐藏函数?因为我想将用户重定向到一个新页面,然后在 ViewSTate 或 Sessionstate 中保存一些信息。有什么建议?

【问题讨论】:

  • 如果您仍然需要访问服务器变量,例如 ViewState 或 Session,您应该回发,然后将 Response.Redirect 发送到其他页面。
  • 除非您需要访问 Viewstate,否则我不同意这一点,它需要向服务器发出额外的请求,这是非常昂贵的。会话将以我在下面概述的方法提供。

标签: c# asp.net onclick controls


【解决方案1】:

在您的 java 脚本方法中,将 __dopostback 调用引发到 Server side method

<script type="text/javascript">
     function YourFunction()
     {
         __doPostBack('btnTemp', '')
     }
</script>

其中btnTemp是一个服务器端的按钮,所以在服务器端写一个这个按钮的onClick事件,你可以在那里进行处理,然后重定向到其他页面。

你可以在DoPostBack Understanding了解dopostback

【讨论】:

  • 应该触发 btnTemp_Click() 事件吗?因为目前该页面正在为我做回发。
  • 是的,它必须被解雇,它正在和我一起在这里射击。在回发期间,在 Page_Load 事件中,检查变量 Request.Params["__EVENTTARGET"] 中的值是什么?在积极的情况下,它应该有 btnTemp。
  • 在 Request.Params["__EVENTTARGET" 它显示了 btnTenp,但是按钮点击事件没有触发。如果我在那里设置断点,它只会在按下按钮时触发。你能检查我的代码吗?
  • protected void Page_Load(object sender, EventArgs e) { Label2.Attributes.Add("onClick", "CallMe();"); Label1.Text=Request.Params["__EVENTTARGET"]; } protected void btnTemp_Click(object sender, EventArgs e) { Response.Redirect("test.aspx"); }
  • 我使用了你上面的代码,在 Page_Load 事件中我写了这一行,Label1.Attributes.Add("onclick", "CallMe();");以便在单击 Label1 时调用 CallMe,当我单击 Label1 时会触发 btnTemp_Click。
【解决方案2】:

在 ASP.NET 按钮上有一个 PostBackUrl 属性,您可以正常呈现按钮,然后回发到不同的页面 - 这是您的 OnClick 方法需要声明的地方。

我强烈建议不要发回同一页面然后执行 Response.Redirect(),请考虑流量。浏览器请求页面,发回然后发送一个 HttpRedirect,然后导航到新页面。使用我上面概述的方法,这不是必需的,并且浏览器必须减少一个请求(这意味着不必发送消息或在服务器上重建页面)并且是显着的性能优势。

【讨论】:

    【解决方案3】:

    我的aspx页面是这样的:

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <script type="text/javascript">
            function CallMe() { __doPostBack('btnTemp', '') }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
             <asp:Button ID="btnTemp" runat="server" Text="Test" onclick="btnTemp_Click" />
             <div> <asp:Label ID="Label1" runat="server" Text="Label1"></asp:Label>
             <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>
        </form>
    </body>
    

    我的服务器端代码如下:

    protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Attributes.Add("onClick", "CallMe();");
        }
    protected void btnTemp_Click(object sender, EventArgs e)
        {
    
        }
    

    这是我写的代码,我没有在上面的代码中包含 using 语句,Page 指令等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2013-05-04
      相关资源
      最近更新 更多