Response.Redirect如果启用,则没有任何内容(ASP.NET)和EventValidation返回错误

我有一个页面,其中一个选择动态生成的按钮。 ASPX代码如下:
<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
当我第一次尝试运行代码时,我收到了“无效的回发/回调参数”的错误消息。我将ASPX页面设置为具有enableEventValidation =“false”属性,并尝试再次运行它。它生成页面很好但是当我点击一个动态生成的按钮时,它就好像它正在加载一些东西,然后只是把我带回到select_hall.aspx(所有这些代码都是一个页面),当(如上所示)它应该带我到select_room.aspx。     
已邀请:
听起来像
Container.DataItem
不是你认为的类型。请尝试
CommandName="<%# Container.DataItem.ToString() %>"
,然后单步执行调试器并查看返回的CommandName。我的感觉是它不是字符串而是某种对象,但很难从LINQ查询中分辨出来。     
所以,似乎我发现了这个问题。在select_hall.aspx的Page_Load部分,我调用了数据库。每次我调用页面时都会重新加载这些值 - 我认为它们在某种程度上与之前缓存的属性不匹配(例如底层的ASP.NET自动命名),这导致了这个问题。我添加了一个If Not Page.IsPostBack Then子句,在其中我放置了数据绑定代码,现在它似乎正常工作。     

要回复问题请先登录注册