【问题标题】: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>

请帮助我我在这里做错了什么。另外,如果您做同样的工作有任何替代方法,请告诉我。

【问题讨论】:

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


    【解决方案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函数:

        &lt;tr onclick="_storeDetails(4)"&gt;

            <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>
        
      • 全部在客户端进行。当然,这取决于您对发布的数据所做的工作。

      【讨论】:

        最近更新 更多