홀수 동작을 보이는 ListView 컨트롤이 있습니다. 행은 포스트 백 이후에만 부분적으로 업데이트됩니다. 나는 여기 누군가가 왜 이런 일이 일어날 지에 관해 밝혀 줄 수 있기를 바라고 있습니다.Listview가 포스트 백 이후에 databind()에서 완전히 업데이트되지 않음
내 listview 데이터 소스는 페이지 세션 상태에 저장된 항목 목록에 바인딩됩니다. 이것은 의도적으로, 여러 사용자가 데이터를 보았으므로 부분적으로 만료 된 오래된보기를 부분적으로 초과합니다. 일반 리조트 작업에서는 정렬이 자바 스크립트를 통해 페이지에서 처리되고 목록/세션 데이터 순서가 콜백을 통해 동기화 상태로 유지됩니다. 콜백은 권한 수준도 검사합니다. 더 복잡한 특정 리조트 작업에서 페이지의 javascript는 정렬 논리를 처리하기 위해 페이지에 다시 게시를 만듭니다. 목록/세션은 콜백 에서처럼 업데이트되고 목록 뷰 컨트롤은 데이터에 리바운드됩니다. 페이지가 다시로드되고 행에 새 주문이 표시됩니다. 문제 없지, 그렇지?
문제리스트 뷰 내의 요소 일부 새로운 주문에 따라 값이 변화하지 않는다는 것이다. 페이지에서 처리되는 하이퍼 링크와 텍스트 (예 : < % # Eval ("ProjectAbbrev") %>)는 적절하게 업데이트되지만 OnItemDataBound 이벤트 메서드를 통해 값을 설정 한 확인란, 리터럴 및 드롭 다운은 그대로 유지됩니다 코드를 단계별로 실행하면 다시 게시하는 동안 메서드가 실행되고 컨트롤이 새 값으로 설정되어야 함을 나타냅니다. 가서 목록을 수동으로 잘라내어 원래 크기의 절반 정도만 채우면 해당 항목 만 다시 채워지지만 체크 상자 등은 여전히 원래 값을 유지합니다.
내 질문은 : 왜 이러한 요소를 포스트 백의 나머지 목록보기 컨트롤 요소와 함께 업데이트하지 않는 것입니까? ASP.NET에서 페이지 라이프 사이클을 오해하고 있거나 일부 버그가 발생했다고 생각합니다.
이 시점에서 나는 더 복잡한 정렬 작업을 자바 스크립트의 페이지로 옮겨야한다고 생각하지만, 다소 까다롭기 때문에 가능한 경우 그렇게하지 않는 것이 좋습니다.
업데이트 : EnableViewState를 false로 설정하려고 시도했지만 수정하지 않았습니다. 페이지의 다른 부분 (저장)이 결국 viewstate 읽기에 의존하기 때문에 어떤 경우에도 해당 전략을 사용할 수 없습니다.
UPDATE :
페이지 : : 나는 그들이이 문제에 도움이 되거 수 있다는 희망에 일부 코드 조각을 제공하고있어 하이퍼 링크 요소가 다시 게시 후 제대로 업데이트됩니다, 그러나 그것의 값을 갖는 CheckBox의는 할당 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;
}
업데이트를 : 나는 일이 점점 포기와 자바 스크립트와 클라이언트 측에 내 정렬 논리를 이동했습니다. 누군가이 이상한 행동이 왜 일어나고 있는지에 대한 아이디어가 있다면, 나는 여전히 그들을 듣고 싶어합니다!
감사합니다! 나는이 문제에 대해 거의 전진 해왔다. 그러나이 문제에 다시 들어가면 나는 그 사실을 분명히 알 것이다. – patjbs
팀이 맞습니다. 정확한 문제가 있었고 Page_PreRender가 포스트 백에서 작동합니다. – Jason