0

私は asp.net(C#) の初心者で、ソーシャル ネットワーキング アプリケーションに取り組んでいます。ステータスの更新とコメント セクションにこだわっています。ページがロードされたときに、ステータスの ItemTemplate を作成し、Thread_ID を隠しフィールドに割り当てたので、データリスト内の隠しフィールドにすべてのスレッド (ステータス ') の ID が必要です。しかし問題は、hiddenfield がアイテムごとに異なる値を持っていないことです。どこで間違いを犯しているのかわかりません。私を助けてください。

データリストのコードは次のとおりです。

<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>

コードビハインドは次のとおりです。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        da.SelectCommand = new SqlCommand("SELECT * FROM Status where RegID='" + Session["user"].ToString() + "'", con);
        con.Open();
        da.Fill(ds, "status");
        con.Close();
        DataListStatus.DataSource = ds.Tables["status"];
        DataListStatus.DataBind();
    }

}

ここでは、コメントの内部データリストで 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();
}
4

2 に答える 2

0

隠しフィールドを使用しないでください。ページの読み込み時間のため、この非表示フィールド フィールドはクリアされました。そのため、ラベル コントロールを使用して、ラベル コントロールで visible="false" を設定してください。

また、DataList バインディング メソッドは、pageload イベントの !IsPostBack 内で呼び出す必要があります。

于 2013-04-01T19:12:37.820 に答える