Response.Redirect ничего не делает (ASP.NET) и EventValidation возвращает ошибку, если включено - PullRequest
1 голос
/ 07 марта 2011

У меня есть страница, на которой можно выбирать из динамически генерируемых кнопок.Код 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.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Итак, похоже, я понял проблему. В разделе Page_Load select_hall.aspx у меня был вызов в базу данных. Каждый раз, когда я вызывал страницу, она перезагружала эти значения - и я думаю, что они каким-то образом не соответствовали ранее кэшированным свойствам (например, базовому автоматическому именованию ASP.NET), это вызывало проблему. Я добавил предложение If Not Page.IsPostBack Then, внутри которого я поместил код привязки данных, и теперь он, кажется, работает правильно.

1 голос
/ 07 марта 2011

Звучит так, будто Container.DataItem не тот тип, о котором вы думаете.Вместо этого попробуйте CommandName="<%# Container.DataItem.ToString() %>", затем пройдите по отладчику и посмотрите на имя CommandName, которое отправляется обратно.У меня такое ощущение, что это не строка, а какой-то объект, но это трудно понять только по вашему запросу LINQ.

...