2012-03-01 10 views
0

リピータがあり、ハードウェアの代わりに 値のhtmlチェックボックスコントロールの値を設定しました。マジックナンバーをコーディングする。 リピーターのItemCreatedイベントハンドラーのhtmlチェックボックスコントロールにアクセスしようとすると、値は空の文字列になります( )。これはなぜですか、どうすれば修正できますか? Repaterがない場合でもチェックボックスの値が空です。リピータ内の列挙体を使用しています(ASP.NET Webフォーム)

<asp:Repeater ID="Repeater1" OnItemCreated="Repeater1_ItemCreated" runat="server"> 
    <ItemTemplate>  
     <input type="checkbox" id="checkbox1" value='<%# SomeEnum.Value %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

ワーキング

<asp:Repeater ID="Repeater1" OnItemCreated="Repeater1_ItemCreated" runat="server"> 
    <ItemTemplate>  
     <input type="checkbox" id="checkbox1" value="1" /> 
    </ItemTemplate> 
</asp:Repeater> 
+1

代わりにOnItemDataBoundをタップしてください。 – Malk

+0

それが解決策でした。ありがとうございました!私はItemDataBoundの代わりに(彼らはインテリセンスでお互いにすぐ隣にあります)、偶然ItemCreatedを選択しました。私はコントロールのライフサイクルと関係があると思っていましたが、間違ったイベントがあったことはわかりませんでした。本当にありがとう! – Halcyon

答えて

1

ItemCreatedを動作しない

protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    var myObject = e.Item.DataItem as MyObject; 
    if (myObject != null) 
    { 
     var checkBox = e.Item.FindControl("checkbox1") as HtmlInputCheckBox   

     // The value is empty! 
     var value = checkBox.Value; 
    } 
} 

ItemDataBound前にも、すべてのポストバックでトリガされたC#コードは、彼が制御して再作成します再びデータバインドされる。だからDataSourcedatabound WebControlにアクセスする必要がある場合はRepeaterのようにItemCreatedを使用しません。

それ以外の場合は、findをサーバーに追加する場合は、チェックボックスrunat=server(またはASP.NET CheckBox)を使用します。

関連する問題