为什么onClick C#事件不能在表标签中工作

时间:2017-05-27 05:57:16

标签: c# html asp.net visual-studio onclick

我正在尝试通过连接字符串动态生成标记中的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>

请帮助我,我在这里做错了什么。如果有任何其他选择,你做同样的工作然后告诉我。

2 个答案:

答案 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>
    
  • 全部做客户端。当然,这取决于您对发布数据的处理方式。