【问题标题】:How to set Button clicked programmatically如何以编程方式设置按钮单击
【发布时间】:2012-02-24 21:55:37
【问题描述】:

我在 ASP .Net 中使用 LinkBut​​ton(将其视为按钮)。我需要使用后面的 C# 代码以编程方式单击该按钮。我怎样才能做到这一点..?

【问题讨论】:

  • c# 是服务器端,你确定你不想使用客户端的javascript吗?
  • 点击事件添加事件处理器有问题吗?
  • 事件处理程序调用一些逻辑。没有其他方法可以调用该逻辑?
  • 添加一个从您的点击事件处理程序以及您的其他位置调用的方法。
  • @Charan:然后将 click-handler 中的逻辑封装在一个方法中,该方法带有一个参数,例如一个 ID,并从处理程序以及 page_load 调用它(您只需要获取那里的第一条记录的ID)。

标签: c# asp.net events button linkbutton


【解决方案1】:
private void Page_Load()
{
    if (!Page.IsPostBack)
    {
        //when the pages is rendered and loaded for the first time execution goes here
        //so... call the method that selects the first row
        SelectsFirtsRow();
    }
    else
    {
     //do something else
     ...
    }
}
protected void FirstRowLinkButton_Click(object sender, EventArgs e)
{
    //move all the code that selects the first row to a method.
    //you can also supply some arguments if they are needed for method execution... that's up to you
    SelectsFirtsRow();
}
public void SelectsFirtsRow();
{
    //your logic goes here. i.e. selects the first row
}

附言 从后面的代码调用事件处理程序是一种不好的做法。事件处理程序旨在触发某些客户端操作。

【讨论】:

    【解决方案2】:

    不要将事件处理程序用作方法,它们的唯一目的是处理事件。所有功能都应该封装在可以从事件处理程序中以及在您需要的任何地方调用的方法中。

    protected void Button_Click(sender As Object, e As CommandEventArgs) 
    {
         int id=int32.Parse(e.CommandArgument.ToString());
         doSomething(id);
    }
    

    然后您也可以从页面的加载事件中调用此方法:

    protected void Page_Load(object sender, EventArgs e)
    {
        //get the ID of the first record in GridView's DataSource here or where you databind the GridView
       doSomething(id);
    }
    
    public void doSomething(int id) { //do something }
    

    如何将 GridView 记录中的 ID 作为CommandArgument 传递:

    <asp:TemplateField>
          <ItemTemplate>
              <asp:LinkButton ID="Button1" runat="server" CommandArgument='<%#Eval("IdColumn")%>' OnCommand="Button_Click" Text="Do Something">
              </asp:LinkButton>
           </ItemTemplate>
    </asp:TemplateField>
    

    【讨论】:

      【解决方案3】:

      嗯,我不太确定你想在这里实现什么。但是一种方法是简单地调用事件处理方法代码。

      但是如果您有兴趣将响应发送回客户端并将按钮单击作为新请求,您可以尝试一下

      ASPX:

          <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">LinkButton1</asp:LinkButton>
          <br />
          <br />
          <asp:LinkButton ID="LinkButton2" runat="server" onclick="LinkButton2_Click">LinkButton2</asp:LinkButton>
      

      C#:

          protected void LinkButton1_Click(object sender, EventArgs e)
          {
              Response.Write("I was programatically called!");
          }
      
          protected void LinkButton2_Click(object sender, EventArgs e)
          {
              string pbref = Page.GetPostBackEventReference(LinkButton1);
              Page.ClientScript.RegisterClientScriptBlock(GetType(), "KeyName", "<script>" + pbref + "</script>");
          }
      

      但是有 1 个问题。您可能会遇到事件验证错误。在这种情况下,您可能必须按如下方式禁用事件验证:

      <%@ Page Language="C#" EnableEventValidation="false" ... %>
      

      我不会推荐它。还有其他方法可以克服它..但这是一个不同的谷歌搜索:)

      【讨论】:

        猜你喜欢
        • 2013-10-09
        • 1970-01-01
        • 2017-06-17
        • 2013-05-23
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2015-02-20
        • 2010-10-18
        相关资源
        最近更新 更多