- PR -

マスターページを使用したページでPostBack時のDataSourceについて

投稿者投稿内容
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 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のよい参考書があれば教えていただけると助かります。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-12 01:03
DataListにどういったデータをどのようにセットしてますか?
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2007-01-12 15:30
DataListには、hashtableとdatatableをセットして試しましたが、結果は同じでした。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-12 16:10
私の手元ではマスターページのときも問題なく動いてます。
マスターページがあるときとないときでは操作はまったく同じですか?
また、PostBack時にどういった操作をしてますか?
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 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
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-15 10:58
ポストバックはどのように行っていますか?
マスターページを適用したうえで確かめてみましたが、ボタンクリックで
ポストバックさせた場合、このソースで表示されたデータはポストバック後も
そのまま表示されています。
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 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>
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-15 13:30
リンクボタンをクリックしてポストバックした時点でこれらのデータに対して
なんらかの処理をしていませんか?
その処理をしたあとDataList.DataBind() を行っていない、ということはありませんか?
単純にリンクボタンをクリックしただけなら問題なく動きます。

#というか、問題がでていたら単純化して動作をひとつずつ確認していくのが
 デバッグの基本だと思います。
 人に聞く前にひととおりの作業をためしてみて、どこがおかしいのかよく
 考えてみてください。

スキルアップ/キャリアアップ(JOB@IT)