0

グリッドビュー、ボタン、コメント用の複数行のテキストボックスを備えたユーザーコントロールがあります。

ページがポストバックされると、Gridviewは正常に動作します(そのコントロールはポストバック後も値を保持します)。ただし、コメントテキストボックスは、私が何をしても、常に空です。

protected void Page_Load(object sender, EventArgs e)
{
   //This code is in the user ciontrol.
  if (!IsPostBack)
   {
     string test = this.txtDepartmentComments.Text;
   }

}

その行にブレークポイントを設定すると、値は常に空になります。私はまた、次のようにコードビハインドで値を設定しようとしました:

protected void Page_Load(object sender, EventArgs e)
{
   //This code is in the user ciontrol.
   if (!IsPostBack)
   {
     this.txtDepartmentComments.Text = "Test!";
   }
}

ただし、ページが読み込まれると、コントロールは空のままになります。

なぜこれが起こっているのか考えていますか?

編集

これはascxコード(つまりユーザーコントロール)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false" >
</asp:GridView>

<asp:TextBox ID="txtComments" runat="server" Columns="45" TextMode= "MultiLine"/>
 <asp:Button ID="btnComplete" runat="server" Text="Completed"/>

そして、このIDはaspx(つまり親ページ)です

<asp:Repeater ID="rpNewHire" runat="server">
       <HeaderTemplate>
        <table>            
       </HeaderTemplate>
       <ItemTemplate>
        <tr>
            <td>
                <user:MyUserControl ID = "MyUserControl1" runat = "server" 
                 DepartmentID= '<%# Eval("DepID")%>'><user:MyUserControl />
            </td>
        </tr>
       </ItemTemplate>
       <FooterTemplate>
        </table>
       </FooterTemplate>
    </asp:Repeater>
4

2 に答える 2

1

if(!IsPostBack) は、ポストバック後にコントロールから値を読み取るためのものです。最初の読み込み時にテキスト ボックスの値を読み取ろうとしていますが、これは常に空です。「!」を削除してください。あなたの状態から。また、aspxページのコンテンツなしで問題をデバッグするのは難しいため、質問にデザイン部分も投稿してみてください。

編集

  1. ユーザー タグがリピーター内で適切にフォーマットされていません。終了タグと runat 属性がありません

    <user:MyUserControl runat="server" ID = "MyUserControl1" DepartmentID= '<%# Eval("DepID")%>'></user:MyUserControl>
    
  2. リピーター内のコントロールには直接アクセスできません。データをリピーターにバインドした後、リピーターの行をループして子コントロールを見つけ、それらから値を読み取ってみる必要があります。

これを確認してください http://msdn.microsoft.com/en-us/magazine/cc163780.aspx

于 2013-02-14T20:40:49.187 に答える
1

ページIsPostBackと各ユーザー コントロールIsPostBackは同じではありません。

ユーザー コントロールがポスト バックされると、その特定のコントロールIsPostBackは true ですが、他のユーザー コントロールIsPostBackは false のままです。

ユーザーコントロール内で明示的に使用!Page.IsPostBackして、親ページがポストバックされているかどうかを確認できます。

if(!Page.IsPostBack){
   // do something
}

動的に読み込まれたコントロールは PostBack で値を維持できませんか? ご質問とは直接関係ありませんが、参考になれば幸いです。

于 2013-02-14T21:01:55.817 に答える