2017-05-27 68 views
1

我试图动态生成onClick事件标记通过连接字符串和即时获得我想要的结果,但是当我点击元素然后事件不工作。我认为这可能不支持onClick事件,并尝试其他方式,如put onClick等,但没有任何工作。请在这里帮助我。为什么onClick事件的C#不工作​​表标记

我的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#代码:

<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> 
:,即时通讯调用的onClick()

protected void _storeDetails(int uid) 
{ 
    Session["AssignmentNo"] = uid; 
    Response.Redirect("~/ViewAssignment.aspx"); 
} 

导致浏览器代码

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; 

    } 
} 

功能210

请帮助我什么即时做错在这里。同样,如果有任何替代品你做同样的工作,然后告诉我。

回答

0

您试图从客户端代码调用服务器端函数,在您的示例中,该代码不起作用。您有几个选项:

  • 做一个回发并将所需的控件设置为源。您需要创建一个客户端的JavaScript函数:()

    <tr onclick="_storeDetails(4)">

    <script type="text/javascript"> 
        function _storeDetails(parameter) 
        { 
         __doPostBack('_storeDetailsClick', parameter) 
        } 
        </script> 
    

    然后,您可以在Page_Load中处理回发。

  • 使用Web方法:

    [WebMethod] 
    public static void StoreDetails(int uid) 
    { 
    } 
    

    调用它的JavaScript:

    PageMethods.SetName(parameterValue, onSuccess, onFail); 
    

    需要初始化页面方法:

    <asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true"></asp:ScriptManager> 
    
  • 做它所有客户端。当然,这取决于你对发布的数据做什么。

2

这是行不通的,因为这样的:

<tr onclick="_storeDetails(4)"> 

手段来调用客户端的funtion _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); 
    } 
}