首页 > 解决方案 > onserverclick 不会在代码后面触发

问题描述

我在后面的代码中有这个功能

       protected void ShowDocument(int id, object sender, EventArgs e)
    {
        byte[] bytes;
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            con.Open();
            using (SqlCommand com = new SqlCommand("SELECT Data FROM FileUploader2", con))
            {
                using (SqlDataReader reader = com.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        bytes = (byte[])reader["Data"];
                    }
                }
            }
        }
    }

我在我的 aspx 上调用它如下:

  <input type="button"  ID="btnView" runat="server" value="View" 
    onserverclick="ShowDocument(id)" />

但它给了我一个错误,说名称 id 在当前上下文中不存在。我究竟做错了什么?如果我只是写 ShowDocument 然后

“ShowDocument”没有重载匹配委托“System.EventHandler”

标签: c#asp.net

解决方案


假设 id 在您当前的上下文中不存在,您得到的异常是正确的。
当 onclick 事件触发时,您的 id 字段在 .aspx 文件中不存在,因此无法作为参数传递到方法中。

看一下如何将参数传递到 onclick 函数的示例:

在你的 aspx

<asp:Button ID="test" runat="server" CommandArgument='<%#Eval("product.ProductId")%>' CommandName="ThisBtnClick" OnClick="MyBtnHandler" />

在后面的代码中

void MyBtnHandler(Object sender, EventArgs e)
{
   Button btn = (Button)sender;
   switch (btn.CommandName)
   {
      case "ThisBtnClick":
         DoWhatever(btn.CommandArgument.ToString());
         break;
      case "ThatBtnClick":
         DoSomethingElse(btn.CommandArgument.ToString());
         break;
   }
}

推荐阅读