Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据列表中hiddenfield的绑定值不是特定于项的_C#_Asp.net_Datalist_Hiddenfield - Fatal编程技术网

C# 数据列表中hiddenfield的绑定值不是特定于项的

C# 数据列表中hiddenfield的绑定值不是特定于项的,c#,asp.net,datalist,hiddenfield,C#,Asp.net,Datalist,Hiddenfield,我是asp.net(C#)的初学者,正在开发一个社交网络应用程序。我一直停留在状态更新和评论部分。我希望在加载页面时,所有线程(status')都应该在数据列表中的hiddenfields中有它们的ID,因为我已经为status创建了一个ItemTemplate,并为hiddenfield分配了Thread_ID。但问题是hiddenfield对于不同的项没有不同的值。我不知道我在哪里犯了错误。请帮帮我 以下是datalist的代码: <asp:DataList ID="DataListS

我是asp.net(C#)的初学者,正在开发一个社交网络应用程序。我一直停留在状态更新和评论部分。我希望在加载页面时,所有线程(status')都应该在数据列表中的hiddenfields中有它们的ID,因为我已经为status创建了一个ItemTemplate,并为hiddenfield分配了Thread_ID。但问题是hiddenfield对于不同的项没有不同的值。我不知道我在哪里犯了错误。请帮帮我

以下是datalist的代码:

<asp:DataList ID="DataListStatus" runat="server" RepeatColumns="1"
            onitemdatabound="DataListStatus_ItemDataBound"
            onitemcommand="DataListStatus_ItemCommand">
        <ItemTemplate>
            <table width="550px">
                <tr><asp:HiddenField ID="HFieldThreadID" Value='<%#Eval("Thread_ID") %>' runat="server" />
                    <td style="vertical-align:top; width:50px;" align="left" rowspan="3"><a href='UserProfile.aspx?loginid=<%#Eval("RegID")%>' ><img alt="Propic" src="../Images/ProPic.jpg" width="50px" height="50px" /></a></td>
                    <td style="vertical-align:top; width:250px;" align="left"><a href='UserProfile.aspx?loginid=<%#Eval("RegID")%>' ><%#Eval("RegID")%></a></td>
                    <td style="vertical-align:top; width:250px;" align="right"><%#Eval("St_Time") %></td>
                </tr>
    </table>
  </ItemTemplate>
</asp:DataList>
在这里,我使用内部数据列表中hiddenfield的值作为注释:

protected void DataListStatus_ItemDataBound(object sender, DataListItemEventArgs e)
{
    da.SelectCommand = new SqlCommand("SELECT * FROM Comment WHERE Thread_ID='" +      ((HiddenField)e.Item.FindControl("HFieldThreadID")).Value + "'", con);
    con.Open();
    da.Fill(ds, "cmts");
    con.Close();
    ((DataList)e.Item.FindControl("DataListCmt")).DataSource = ds.Tables["cmts"];
    ((DataList)e.Item.FindControl("DataListCmt")).DataBind();
}

我在
ItemDataBound
中注意到的一点是,在搜索和绑定项内的控件之前,您需要确保
e.Item是
Item
类型或
AlternatingItem
类型

注意:请使用参数化查询以避免SQL注入

protected void DataListStatus_ItemDataBound(object sender, DataListItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.Item || 
      e.Item.ItemType == ListItemType.AlternatingItem)
   {
    da.SelectCommand = new SqlCommand("SELECT * FROM Comment WHERE Thread_ID='" +      ((HiddenField)e.Item.FindControl("HFieldThreadID")).Value + "'", con);
    con.Open();
    da.Fill(ds, "cmts");
    con.Close();
    var dataList = (DataList)e.Item.FindControl("DataListCmt");
    dataList.DataSource = ds.Tables["cmts"];
    dataList.DataBind();
   }
}

不要使用隐藏字段。因为页面加载时间已清除此隐藏字段。因此请使用label控件并在label控件中设置visible=“false”


并且必须在内部调用DataList绑定方法!页面加载事件中的IsPostBack

隐藏字段在页面加载时间被清除
不正确,因为
隐藏字段
具有视图状态。
HiddenField
中存储的值在回发之间持续存在。
DataList绑定方法在@Don的代码中是正确的,因为它是嵌套的DataList。@Win是正确的。还有一件事,我想用回发一次又一次地执行代码,所以我不能把数据绑定方法放进去!我没有回邮。顺便说一句,谢谢你的回答。我不知道你的建议对我的代码有什么影响。如果(e.Item.ItemType==ListItemType.Item | | e.Item.ItemType==ListItemType.AlternatingItem),您能告诉我这项检查做什么吗?顺便说一句,我犯了一些其他的错误。在将数据集分配给下一个线程之前,我没有清除数据集,这就是为什么我感觉隐藏字段的值是相同的。非常感谢您的回答。注意:请使用参数化查询以避免SQL注入。非常感谢你的建议。事实上,我知道这一点,但我觉得这有点困难和乏味,所以我可能会在以后做。这样可以解决另一个问题,即插入单引号(')。
protected void DataListStatus_ItemDataBound(object sender, DataListItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.Item || 
      e.Item.ItemType == ListItemType.AlternatingItem)
   {
    da.SelectCommand = new SqlCommand("SELECT * FROM Comment WHERE Thread_ID='" +      ((HiddenField)e.Item.FindControl("HFieldThreadID")).Value + "'", con);
    con.Open();
    da.Fill(ds, "cmts");
    con.Close();
    var dataList = (DataList)e.Item.FindControl("DataListCmt");
    dataList.DataSource = ds.Tables["cmts"];
    dataList.DataBind();
   }
}