2011-03-07 19 views
1

我有一個頁面,其中一個從一個動態生成的按鈕的選擇中選擇。的ASPX代碼如下:Response.Redirect如果啓用Nothing(ASP.NET)和EventValidation返回錯誤

<div> 
<asp:Repeater ID="rptrHalls" runat="server" OnItemCommand="Choose_Hall"> 
    <ItemTemplate> 
     <asp:Button ID="btnChooseHall" runat="server" 
     CommandName="<%# Container.DataItem %>" Text="<%# Container.DataItem %>" 
     /> 
    </ItemTemplate> 
</asp:Repeater> 
</div> 

當頁面被加載下面的代碼被用於產生的按鈕:

 ' Show which halls they are eligible for. 
    Dim dbHalls As New pbu_housingDataContext 
    'Dim gender As String = Session("gender").ToString 
    Dim selectedHalls = (From sh In dbHalls.Rooms _ 
         Where sh.gender = Session("gender").ToString _ 
         Where sh.current_occupancy < sh.max_occupancy _ 
         Where sh.is_available = True _ 
         Select sh.building_name).Distinct() 
    rptrHalls.DataSource = selectedHalls 
    rptrHalls.DataBind() 

當在動態生成的用戶點擊按鈕下面的代碼被觸發:

Public Sub Choose_Hall(ByVal Sender As Object, ByVal e As RepeaterCommandEventArgs) 
    Session("Hall") = e.CommandName.ToString 
    Response.Redirect("select_room.aspx") 
    End Sub 

當我第一次嘗試運行代碼時收到錯誤消息「Invalid postback/callback argument」。我將ASPX頁面設置爲具有enableEventValidation =「false」屬性,並嘗試再次運行它。它生成的頁面正常,但是當我點擊一個動態生成的按鈕時,它的行爲就像加載了一些東西,然後讓我回到select_hall.aspx(頁面中的所有代碼都是一個),當(如上所示)它應該帶我到select_room.aspx。

+0

當你調試這個你有沒有進入Choose_Hall()? – canon 2011-03-07 15:34:14

+0

它似乎並不是,但我不確定它爲什麼不是? – davemackey 2011-03-07 15:41:39

回答

1

所以,看來我找到了問題。在select_hall.aspx的Page_Load部分中,我調用了數據庫。每次我調用頁面時,它都會重新加載這些值 - 而且我認爲它們並沒有以某種方式與先前緩存的屬性相匹配(例如,基礎ASP.NET自動命名),這導致了問題。我添加了一個If Not Page.IsPostBack Then子句,我在其中放置了數據綁定代碼,現在看起來可以正常工作。

1

聽起來像Container.DataItem是不是你認爲它的類型。改爲嘗試CommandName="<%# Container.DataItem.ToString() %>",然後逐步調試器並查看回傳的CommandName。我的感覺是,它不是一個字符串,而是某種對象,但很難從LINQ查詢中知道。