- - PR -
マスターページを使用したページでPostBack時のDataSourceについて
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-01-11 16:55
ASP.NET2.0(Visual Web Developer 2005 Express Edition)でWEBアプリケーションの開発をしています。
マスターページを使用したページを作成して、datalistコントロールを配置し、PageLoadイベントでPostback時以外の場合にDataSourceをセットしています。初回は正しく表示されるのですが、Postback時にDataSourceがNothingになってしまいます。 マスターページを使用しないページでは、DataSourceが保持されているので、マスターページが影響していると思われるのですが、何か設定があるのでしょうか? 余談ですが、ASP.NET2.0のよい参考書があれば教えていただけると助かります。 |
|
投稿日時: 2007-01-12 01:03
DataListにどういったデータをどのようにセットしてますか?
|
|
投稿日時: 2007-01-12 15:30
DataListには、hashtableとdatatableをセットして試しましたが、結果は同じでした。
|
|
投稿日時: 2007-01-12 16:10
私の手元ではマスターページのときも問題なく動いてます。
マスターページがあるときとないときでは操作はまったく同じですか? また、PostBack時にどういった操作をしてますか? |
|
投稿日時: 2007-01-15 10:29
そーですか・・・。
PageLoadイベントの際に以下コードで設定しています。 1.1では初回のみでよかったのですが、2.0ではPostBack時もデータをセットする必要があるように変わっているのでしょうか? Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack = False Then '初期データをセット SetDefault() End If End Sub Private Sub SetDefault() Dim dt As New DataTable Dim dr As DataRow Dim i As Integer dt.Columns.Add(New DataColumn("Key", GetType(String))) dt.Columns.Add(New DataColumn("Value", GetType(String))) For i = 0 To 4 dr = dt.NewRow dr(0) = "メニュー名" dr(1) = "リンク先URL" dt.Rows.Add(dr) Next DataList.DataSource = dt DataList.DataBind() End Sub |
|
投稿日時: 2007-01-15 10:58
ポストバックはどのように行っていますか?
マスターページを適用したうえで確かめてみましたが、ボタンクリックで ポストバックさせた場合、このソースで表示されたデータはポストバック後も そのまま表示されています。 |
|
投稿日時: 2007-01-15 13:04
回答ありがとうございます。
ポストバックはページ内に配置したDatalistの中のLinkButtonで行っています。 <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <asp:DataList ID="Dl_Menu" runat="server" HorizontalAlign="Center"> <ItemStyle Height="40" /> <ItemTemplate> <asp:LinkButton id="Lnk_SubMenu" runat="server" Font-Size="20px" Font-Underline="false" CausesValidation="false" Visible="true" text='<%# DataBinder.Eval(Container.DataItem, "Key") %>' CommandName="SelectMenu" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Value") %>' Font-Bold="true"></asp:LinkButton> </ItemTemplate> </asp:DataList> </asp:Content> |
|
投稿日時: 2007-01-15 13:30
リンクボタンをクリックしてポストバックした時点でこれらのデータに対して
なんらかの処理をしていませんか? その処理をしたあとDataList.DataBind() を行っていない、ということはありませんか? 単純にリンクボタンをクリックしただけなら問題なく動きます。 #というか、問題がでていたら単純化して動作をひとつずつ確認していくのが デバッグの基本だと思います。 人に聞く前にひととおりの作業をためしてみて、どこがおかしいのかよく 考えてみてください。 |