我正在尝试通过连接字符串动态生成标记中的onClick事件并获得我想要的结果,但是当我点击元素时,事件无法正常工作。我认为可能不支持onClick事件并尝试其他方式,如onClick in等,但没有任何作用。请帮帮我。
我的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>
请帮助我,我在这里做错了什么。如果有任何其他选择,你做同样的工作然后告诉我。
答案 0 :(得分:2)
这不会起作用,因为:
<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);
}
}
答案 1 :(得分:0)
您尝试从客户端代码调用服务器端函数,在您的示例中,该代码不起作用。您有几个选择:
执行回发并将所需的控件设置为源。您需要创建一个客户端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>
全部做客户端。当然,这取决于您对发布数据的处理方式。