c# - 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”
解决方案
假设 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;
}
}
推荐阅读
- node.js - 是否可以调试节点内部模块?
- unit-testing - AssertJ:记录所有通过(和失败)的断言
- php - WordPress:在 functions.php 中运行多个数组以添加自定义字段
- angular - Ionic 3:离子选择中的异步管道在选择之前返回 null
- java - 使用 Java 锁时出现竞争条件的可能性
- c# - 关于问号和冒号的 C# 语法问题
- ios - 如何在 iOS 13 的 UISegmentedControl 中更改段的颜色?
- r - 除了 geom_histogram 中的 binning,我还学习了另一种方法,您可以在 x 轴上对连续变量进行分类,但在网上找不到
- rest - 在 Delphi 中使用 Indy 的 GitHub API
- php - 一组 Excises 数组、向量和更多数组 Pt 1