문제

나는 컨트롤 제어는 전시는 이상한 행동을 행하는 부분적으로만한 후 업데이트하십시오내가 누군가를 희망 수 있습니다 여기에 몇 가지 빛을 발산에서 왜 이런 일이 발생하고 있을 발생.

내 listview DataSource 밖에 없는 항목의 목록을 저장되어있는 페이지에서 세션 상태입니다.이것은 의도적,부분적으로 시간 제한 out-of-date 기 때문에 여러 사용자에게 데이터입니다.에 리조트에는 작업,정렬 처리에서 페이지를 통해 자바스크립트,그리고 목록/세션 데이터 순서를 통해 동기화를 유지 콜백이 있습니다.콜백 또한 확인에 대한 권한 수준이다.에 리조트에는 더 복잡한 자바 스크립트에 페이지를 만드는 게시하는 페이지를 처리할 정렬 논리입니다.목록/세션입 업데이트로 콜백에서는,다음 listview 컨트롤이 반등하는 데이터입니다.페이지 다시 표시됩니다.문제 없어요,그렇죠?

문제는 에 있는 요소의 목록을 변경하지 않는 값에 따라 새로운 순서입니다.면 하이퍼링크와 텍스트 처리되는 페이지에서(ie 아 <%#Eval("ProjectAbbrev")%>)을 적절하게 업데이트,체크박스,리터럴,드롭다운 자신의 값을 통해 설정 OnItemDataBound 이벤트 방법은 없다-그들은"frozen"장소에서,심지어 스테핑하지만 코드를 통해 보여준다는 방법은 실행 중에 다시 게시고,컨트롤 설정해야 합니다 그들의 새로운 값입니다.면 이동 및 수동으로 목록을 잘라내는 말로,절반은 원래 크기,충분히 확인만 해당 항목은 다시 채워지만,체크박스와 같은 여전히 유지 원래 값입니다.

그래서 제 질문은:왜 이러한 요소를 업데이트하는의 나머지 부분과 함께 listview 제어 요소에 다시 게시?나는 느낌이 나는 하나 오해 페이지에서 수명 주기 ASP.NET 또는데 발생하는 버그의 어떤 종류.

이 시점에서 나는 생각하고 나는 이야기는 더 복잡한 정렬 작업을 페이지에서 자바스크립트,하지만 하는 것이 오히 까다로운 나처럼 이렇게 하는 것을 피하기 위하여 가능한 경우.


업데이트:가 설정 EnableViewState false 하지 않습니다.나는 사용할 수 없는 전략에 어떤 경우 다른 부분의 페이지(저장)의지를 읽 viewstate 습니다.
업데이트:나는 일부를 제공하는 코드 조각에서는 희망이 그들을 수 있고 이 문제점:

페이지:하이퍼링크 요소입 업데이트이 제대로 후 다시 게시지만,체크박스가 그 값에 할당된 OnQueueRepeater_ItemDataBound 방법 동일하게 유지됩니다.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TextProcessorProjects.ascx.cs" Inherits="ETD.UI.Controls.TextProcessorProjects" %>

<asp:ListView ID="QueueListView" runat="server" OnItemDataBound="OnQueueRepeater_ItemDataBound">
 <ItemTemplate>
  <tr>
   <td><asp:HyperLink runat="server" ID="ProjectIDLink"><%# Eval("ProjectAbbrev") %></asp:HyperLink></td>
   <td><asp:CheckBox runat="server" ID="ScannedCheckBox" BorderStyle="None" /></td>
  </tr>
 </ItemTemplate>
</asp:ListView>

뒤에 코드:에 다시 게시,다음과 같은 코드가 실행됩니다.

protected List<Book> QueueDataItems
{
 get { return (List<Book>)Session["Queue"]; }
 set { Session["Queue"] = value; }
}

else if (IsPostBack && !Page.IsCallback)
{
 // resort QueueDataItems List appropriately
 ResortQueue(Request.Params) 
 // rebind
 QueueListView.DataSource = QueueDataItems;
 QueueListView.DataBind();
}

protected void OnQueueRepeater_ItemDataBound(object sender, ListViewItemEventArgs e)
{
 // ...
 // ... other controls set
 CheckBox scannedCheckBox = e.Item.FindControl("ScannedCheckBox") as CheckBox;
 scannedCheckBox.Checked = book.Scanned;
}

업데이트:내가 주인공이 작동하고 움직 정렬 로직 클라이언트 측면 javascript.면 누구나 어떤 아이디어를 왜 이런 이상한 행동이 일어나고 있었지만,나는 여전히 청문회에 관심이 있다!

도움이 되었습니까?

해결책

의 관심 지점에서 페이지 당신은 당신 데이터 바인딩에 대?Page_Load?

에 그것을 시도 OnPreRender-도움이 될 수 있습니다.

다른 팁

같은 소리 ViewState 에서 발로 다시 채우기 데이터입니다.어떤 경우에,당신은 당신 데이터 바인딩에서 모든 다시 게시 어쨌든,당신은 아마 설정 EnableViewState 의 ListView 거짓을 줄 페이지 크기가 있습니다.

나는 생각이 관련된 주문의 경우 다양한 이벤트가 트리거되는 동안 페이지를 얻을 수 있습니다.보 ASP.NET 페이지 수명 주기 개요.당신이해야 할 데이터 바인딩에서 Page_OnPreRender 을 확인하는 replopulating 후 이루어집 사건을 통제(는 것은 데이터를 업데이트)습니다.

어쩌면 당신의 QueueListView 이 다시 바인딩에 대한 몇 가지 이유입니다.

다시 설정해 보십시오 DataSource 가치 후 바인딩()생

QueueListView.DataBind();
QueueListView.DataSource = null;

어떤 기회이 될 수 있습 캐싱 문제입니까?실행으로 유사한 문제를 사용하여 listview 로 XMLDatasource.나는 작 viewstate.나는 바인딩 listview 에서 뒤에 코드 및 사용 XPath 그것을 쓰는 모든 화면에 내 페이지.이 검색을 사용....다음 검색을 했도 새로운 정보를 나타났다.는 이유이기 때문에 XMLDatasource 는 캐싱 기본적으로 사용됩니다.내 경우에는 타격 했 DB 모든 시간을 필요가 없었 캐시습니다.를 해제 하에서의 캐싱 datasource 고 내 모든 문제들을 수정했습니다.

나는 단지 이것을 언급하기 때문에 오류가 나는 소리와 동일한 당신입니다.나는 볼 수 없는 방법을 검색할 책 itemdatabound-고 당신이 사용하지 않는 XML 데이터 소스에 보이는 것입니다.....그러나 내가 생각하의 의견이 당신을 위해 무언가이다.행운을 빕니다....하지만 그것은 소리처럼 당신은 이미에 이동:-).

은 checkbox 컨트롤 ReadOnly=true 또는 Enabled=false?

나는 문제로 컨트롤을 하나의 이러한 특성을 위와 같이 설정하지 않 업데이트하는 방법에 상관없이 시도하는 인력으로 움직 컨트롤 코드에서 뒤에 있습니다.나는 생각을 비활성화하 viewstate 또한 무시하는 조의"기능"ASP.NET 지만,그것은 총 가치가있다.

또한,만약 항목의 정렬을 통해 클라이언트 측 코드는,주문을 보존에 다시 게시?나는 생각하지 않는 것을 변경할 수 있습니다 CLR 객체가 세션에 자바스크립트를 통해.

가 확실하지 않는 경우에 이것은,대체 <%#Eval("ProjectAbbrev")%>으로 하이퍼링크입니다.텍스트에서 할당된 OnQueueRepeater_ItemDataBound 방법을 보면 모두 행 얻을 올바르게 채워집니다.

이것은 아마도지 않는 문제가 해결 될 것입니다 하지만 알고 흥미로운 결과입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top