c#
  • asp.net
  • .net
  • 2012-08-14 2 views 0 likes 
    0

    : 리피터 버튼이 내 메소드 대신 page_load에 게시됩니까? 나는 다음과 중계기가 aspx 페이지에서

    <asp:Repeater runat="server" ID="r" OnItemCommand="paper_ItemCommand"> 
        <ItemTemplate> 
         <div style="padding-bottom:20px"> 
          <asp:HiddenField runat="server" ID="questionID" Value='<%# Eval("ID") %>'/> 
          <asp:Label runat="server" ID="questionNumber" Text='<%# Eval("Number") %>'/><br /> 
          <asp:Label runat="server" ID="question1" Text='<%# Eval("Question1") %>' /><br /> 
          [ <asp:Label runat="server" ID="questionMark" Text='<%# Eval("Mark") %>'/> ]<br /> 
          <asp:Button ID="View_Conversations" runat="server" Text="View Conversations" CommandName="ViewConversationsCommand" /> 
         </div> 
        </ItemTemplate> 
        <SeparatorTemplate> 
         <hr /> 
        </SeparatorTemplate> 
    </asp:Repeater> 
    

    그리고 파일 뒤에 코드에서

    나는 다음과 같은 방법이 있습니다

    protected void Page_Load(object sender, EventArgs e) 
        { 
         var paperID = Session["paperID"].ToString(); 
         QuestionPaper = repository.GetPaper(Int32.Parse(paperID)); 
         r.DataSource = QuestionPaper.Questions; 
         r.DataBind(); 
        } 
    
        protected void paper_ItemCommand(object sender, RepeaterCommandEventArgs e) 
        { 
         switch (e.CommandName) 
         { 
          case "ViewConversationsCommand": 
           var hidden = e.Item.FindControl("questionID") as HiddenField; 
           var myquestionID = hidden.Value; 
           break; 
         } 
        } 
    

    나는 회화보기 단추를 클릭 할 때 내가 가진 문제를 리피터에서 코드는 내 paper_ItemCommand 메서드 대신 page_load 메서드를 히트합니다. 나는 여기서 무엇이 잘못 되었는가?

    답변

    4

    당신이 다시 게시 페이지의 그 자체와 전체 페이지 수명주기에 발생하는 버튼을 명중 할 때마다 실행 얻을 때문에 페이지로드가 발생합니다. 버튼을 클릭 할 때 페이지로드 작업을 실행하지 않도록하려면 다음과 같이 시도하십시오.

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if(!IsPostBack){ 
         // Your existing stuff 
        } 
    } 
    

    행운을 빌어 요 !! 설정 다시 게시하지 않을 경우

    2

    페이지에 다시 게시 할 때 (예 : Button 클릭)를 포함하여 Page_Load 이벤트 처리기가 실행됩니다. 열쇠는 Page 객체의 IsPostBack 속성을 확인하는 것입니다

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!Page.IsPostBack) 
        { 
         // do things that only should be done on the first page load 
         var paperID = Session["paperID"].ToString(); 
         QuestionPaper = repository.GetPaper(Int32.Parse(paperID)); 
         r.DataSource = QuestionPaper.Questions; 
         r.DataBind(); 
        } 
    } 
    
    1

    를 Page_Load 항상 초기화 첫번째 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconwebformspageprocessingstages.asp 테스트를 실행

    if(!Page.IsPostback) 
    { 
    var paperID = Session["paperID"].ToString(); 
         QuestionPaper = repository.GetPaper(Int32.Parse(paperID)); 
         r.DataSource = QuestionPaper.Questions; 
         r.DataBind(); 
    } 
    
    관련 문제