为啥 C# 的 onClick 事件在表标签的 <td> 中不起作用
Posted
技术标签:
【中文标题】为啥 C# 的 onClick 事件在表标签的 <td> 中不起作用【英文标题】:why onClick Event of C# not working in <td> of table tag为什么 C# 的 onClick 事件在表标签的 <td> 中不起作用 【发布时间】:2017-10-28 01:11:45 【问题描述】:我正在尝试通过连接字符串在标记中动态生成 onClick 事件并获得我想要的结果,但是当我单击元素时,事件不起作用。我认为这可能不支持 onClick 事件并尝试了其他方法,例如将 onClick 放入等,但没有任何效果。请在这里帮助我。
我的html代码:
<table class="downloadTable">
<tr>
<th class="sn">SN</th>
<th class="assi">Notes Title</th>
<th class="pby">Subject</th>
<th class="ld">Posted by</th>
<th class="dp">Posted date</th>
</tr><%=getNotesData()%>
</table>
我的 C# 编码:
public string getAssignmentData()
string data = "";
string CS = ConfigurationManager.ConnectionStrings["_logdb"].ConnectionString;
using (SqlConnection conn = new SqlConnection(CS))
string query = "Select * from _tbNotes";
SqlCommand comm = new SqlCommand(query, conn);
conn.Open();
using (SqlDataReader drd = comm.ExecuteReader())
if (drd.HasRows)
while (drd.Read())
int id = 1;
string title = drd.GetString(1);
string sub = drd.GetString(2);
string auth = drd.GetString(3);
data += "<tr OnClick=\"_storeDetails(4)\"><td>" + id + "</td><td>" + title + "</td><td>" + sub + "</td><td>" + auth + "</td></tr>";
id++;
return data;
我调用 onClick() 的函数
protected void _storeDetails(int uid)
Session["AssignmentNo"] = uid;
Response.Redirect("~/ViewAssignment.aspx");
生成的浏览器代码:
<table class="massi tb">
<tbody>
<tr>
<th class="sn">SN</th>
<th class="assi">Assignment Title</th>
<th class="pby">Posted By</th>
<th class="pd">Post Date</th>
<th class="ld">Last Submit Date</th>
</tr>
<tr onclick="_storeDetails(4)">
<td>1</td>
<td>Java assignment 1</td>
<td>java</td>
<td>tanvi</td>
</tr>
<tr onclick="_storeDetails(4)">
<td>1</td>
<td>vector graphics</td>
<td>web development</td>
<td>pandey</td>
</tr>
<tr onclick="_storeDetails(4)">
<td>1</td>
<td>Advance java assignment 2</td>
<td>Advance Java</td>
<td>Tenvi Gautam</td>
</tr>
<tr>
<td>1</td>
<td onclick="_storeDetails">Java assignment 1</td>
<td>java</td>
<td>tanvi</td>
</tr>
</tbody>
请帮助我我在这里做错了什么。另外,如果您做同样的工作有任何替代方法,请告诉我。
【问题讨论】:
【参考方案1】:这行不通,因为:
<tr onclick="_storeDetails(4)">
表示在客户端调用函数_storeDetails
。因此,该函数必须是 javascript 函数。
您的storeDetails
是服务器端的一种方法。你需要这样做:
<tr onclick="javascript:__doPostBack('_storeDetails','4');">
那么在服务器端,你需要这段代码:
if (this.IsPostBack)
if (Request["__EVENTTARGET"] == "_storeDetails")
// This can fail if you pass a value which is not an integer
// You can use TryParse instead if you want.
int param = int.Parse(Request["__EVENTARGUMENT"]);
_storeDetails(param);
【讨论】:
【参考方案2】:您正在尝试从客户端代码调用服务器端函数,在您的示例中这不起作用。您有几个选择:
执行回发并将所需控件设置为源。您需要创建一个客户端javascript函数:
<tr onclick="_storeDetails(4)">
<script type="text/javascript">
function _storeDetails(parameter)
__doPostBack('_storeDetailsClick', parameter)
</script>
然后您可以在 Page_Load() 中处理回发。
使用网络方法:
[WebMethod]
public static void StoreDetails(int uid)
用 JavaScript 调用它:
PageMethods.SetName(parameterValue, onSuccess, onFail);
你需要初始化页面方法:
<asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true"></asp:ScriptManager>
全部在客户端进行。当然,这取决于您对发布的数据所做的工作。
【讨论】:
以上是关于为啥 C# 的 onClick 事件在表标签的 <td> 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章