2011-03-07 2 views
1

동적으로 생성 된 버튼 중에서 하나를 선택하는 페이지가 있습니다.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 

코드를 처음 실행하면 "유효하지 않은 포스트 백/콜백 인수"라는 오류 메시지가 나타납니다. 나는 ASPX 페이지를 enableEventValidation = "false"속성으로 설정하고 다시 실행 해 보았습니다. 그것은 괜찮아요 페이지를 생성하지만 동적으로 생성 된 버튼을 클릭하면 뭔가를로드하는 것처럼 행동하고 select_hall.aspx (이 코드는 모두 하나의 페이지)로 돌아옵니다. (위에서 볼 수 있듯이) 그것은 나를 select_room.aspx로 데려 가야한다.

+0

이 디버깅 할 때 혹시 Choose_Hall() 단계? – canon

+0

실제로 보이지는 않지만 왜 그렇지 않은지 잘 모르겠습니다. – davemackey

답변

1

그래서 문제가있는 것으로 보입니다. select_hall.aspx의 Page_Load 섹션에서 데이터베이스를 호출했습니다. 페이지를 호출 할 때마다이 값을 다시로드하는 중이었습니다. 이전에 캐시 된 속성 (예 : 기본 ASP.NET 자동 이름 지정)과 일치하지 않는다고 생각합니다. 이로 인해 문제가 발생했습니다. If Not Page.IsPostBack Then 절에서 데이터 바인딩 코드를 배치 했으므로 제대로 작동하는 것으로 보입니다.

1

Container.DataItem는 생각하는 유형이 아닙니다. 대신 CommandName="<%# Container.DataItem.ToString() %>"을 시도한 다음 디버거를 단계별로 실행하고 게시 된 CommandName을 살펴보십시오. 내 감정은 문자열이 아니라 개체의 일종이지만 LINQ 쿼리만으로는 알기 어렵다.

관련 문제