【问题标题】:onserverclick does not get triggered at code behindonserverclick 不会在后面的代码中触发
【发布时间】:2020-02-13 21:08:35
【问题描述】:

我的代码中有这个功能

       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”

【问题讨论】:

  • 你的 'id' 在 aspx 文件中在哪里?它存在吗?

标签: c# asp.net


【解决方案1】:

假设 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;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多