none
取得DataList的 index 參數? RRS feed

  • 問題

  • 各位前輩您好:
        小弟目前在做網路相簿,
        目前已經做好相簿頁了(就是可以顯示一本本的相簿),
        小弟是用DataList制作,
        目前我希望可以按下由ImageButton(在ItemTemplate),
        可以到相片頁(可以顯示相片),
        我本來想用Session存我目前抓到某本相簿的IndexKey(也是相簿頁表格的主鍵),
        然後我利用按下ImageButton可以直接連接到相片頁,
        然後取出Session的IndexKey,然後下SQL語法利用DataList抓出照片,
        但是我目前根本抓不到在DataList裡頭點到相簿的Key,
        我該怎麼做才抓的到?

        又或這是有更好的方法?
        請前輩指導。
     
        小弟用 WINXP VS2008 ASP.NET 2.0 C# 開發網頁。

    2008年3月4日 下午 04:50

解答

  • 試試看這樣行不行...先在ImageButton的CommandArgument綁定主鍵,

    然後在ImageButton Click 事件裡將
    CommandArgument寫入session ..然後跳到相片顯示頁,,取出session

    .aspx
    Code Snippet

    <asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" CommandArgument='<%# Eval("id") %>'
                        OnClick="ImageButton1_Click" /><br />
                    <br />
                </ItemTemplate>
            </asp:DataList>


    .cs
    Code Snippet

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton imgbtn = sender as ImageButton;

            //將indexkey存入session
            Session["IndexKey"] = imgbtn.CommandArgument;

            //跳到相片顯示頁
            Response.Redirect("PhotoList.aspx");
        }


    2008年3月5日 上午 12:56

所有回覆

  • 試試看這樣行不行...先在ImageButton的CommandArgument綁定主鍵,

    然後在ImageButton Click 事件裡將
    CommandArgument寫入session ..然後跳到相片顯示頁,,取出session

    .aspx
    Code Snippet

    <asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" CommandArgument='<%# Eval("id") %>'
                        OnClick="ImageButton1_Click" /><br />
                    <br />
                </ItemTemplate>
            </asp:DataList>


    .cs
    Code Snippet

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton imgbtn = sender as ImageButton;

            //將indexkey存入session
            Session["IndexKey"] = imgbtn.CommandArgument;

            //跳到相片顯示頁
            Response.Redirect("PhotoList.aspx");
        }


    2008年3月5日 上午 12:56
  • p u m a 前輩您好:
        我可以抓出key的參數了,
        也可以存入Session了,
        可是我要號如何取出?
        我這樣寫→Label1.Texta = Session[indexkey].ToString();
        想測試有沒有取出值,
        結果發生了錯誤。
     
        描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。
        請檢閱堆疊追蹤以取得錯誤的詳細資訊,
        以及在程式碼中產生的位置。

        例外詳細資訊: System.NullReferenceException: 並未將物件參考設定為物件的執行個體

        原始程式錯誤:


        行 16:     protected void Page_Load(object sender, EventArgs e)
        行 17:     {
        行 18:         Label1.Text = Session["indexkey"].ToString();
        行 19:        
        行 20:     }
     
        是我取出Session的方法寫錯嗎?

        請前輩指教。

    2008年3月5日 上午 04:59
  • p u m a 前輩您好:
        我後來使用Global.asax的↓

            void Session_Start(object sender, EventArgs e)
        {
            // 啟動新工作階段時執行的程式碼
            Session["IndexKey"] = "100";

        }
     
        然後我在我的相片頁裡打入↓

        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = Session["indexkey"].ToString();
           
        }

        結果可以得到值 = "100",
       
        然後我在我的相簿頁一樣鍵入↓
     
        Session["IndexKey"] = imgbtn.CommandArgument.ToString ();

        後來發現它並沒有把值存入Session裡頭。
        所以之前會有錯誤是因為裡面的值為Null,所以會錯。
        我該怎麼把值存入?
        請前輩指導。

    2008年3月5日 上午 07:07
  • p u m a 前輩您好:
        我已經解決了,因為我是使用PostBackUrl,
        所以它會先跑執行PostBackUrl就沒執行程式了,
        我後來使用Response.Redirect();
        就可以了。^^

     

    2008年3月5日 上午 07:38