Response.Redirect如果启用Nothing(ASP.NET)和EventValidation返回错误

问题描述:

我有一个页面,其中一个从一个动态生成的按钮的选择中选择。的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

所以,看来我找到了问题。在select_hall.aspx的Page_Load部分中,我调用了数据库。每次我调用页面时,它都会重新加载这些值 - 而且我认为它们并没有以某种方式与先前缓存的属性相匹配(例如,基础ASP.NET自动命名),这导致了问题。我添加了一个If Not Page.IsPostBack Then子句,我在其中放置了数据绑定代码,现在看起来可以正常工作。

听起来像Container.DataItem是不是你认为它的类型。改为尝试CommandName="<%# Container.DataItem.ToString() %>",然后逐步调试器并查看回传的CommandName。我的感觉是,它不是一个字符串,而是某种对象,但很难从LINQ查询中知道。