के बाद डेटाबेस() पर पूरी तरह अद्यतन नहीं है। मेरे पास एक सूची दृश्य नियंत्रण है जो एक अजीब व्यवहार का प्रदर्शन कर रहा है - पंक्तियां केवल पोस्टबैक के बाद आंशिक रूप से अपडेट हो रही हैं। मुझे उम्मीद है कि यहां कोई व्यक्ति कुछ प्रकाश डाल सकता है कि यह क्यों हो रहा है।पोस्टबैक
मेरी सूचीदृश्य डेटासोर्स पृष्ठ सत्र स्थिति में संग्रहीत वस्तुओं की एक सूची से जुड़ा हुआ है। यह जानबूझकर, आंशिक रूप से समय-समय पर विचारों के लिए है क्योंकि एकाधिक उपयोगकर्ता डेटा देखते हैं। एक सादे रिज़ॉर्ट ऑपरेशन पर, सॉर्टिंग जावास्क्रिप्ट के माध्यम से पृष्ठ पर संभाला जाता है, और सूची/सत्र डेटा ऑर्डर को कॉलबैक के माध्यम से सिंक में रखा जाता है। कॉलबैक अनुमति स्तर के लिए भी जांच करता है। एक विशेष रिज़ॉर्ट ऑपरेशन पर जो अधिक जटिल है, पृष्ठ पर जावास्क्रिप्ट सॉर्टिंग तर्क को संभालने के लिए पृष्ठ पर एक पोस्टबैक बनाता है। सूची/सत्र को कॉलबैक में अपडेट किया गया है, फिर सूचीदृश्य नियंत्रण डेटा के लिए रिबाउंड है। पृष्ठ फिर से लोड होता है, और पंक्तियां नए ऑर्डर दिखाती हैं। कोई समस्या नहीं, है ना?
समस्या यह है कि कुछ सूचीदृश्य में तत्वों की नए आदेश के अनुसार मूल्य में परिवर्तन नहीं करते है। जबकि पृष्ठ पर संसाधित हाइपरलिंक्स और टेक्स्ट (यानी <% # Eval ("ProjectAbbrev")%>) उचित रूप से अपडेट किए जाते हैं, चेकबॉक्स, अक्षर, और ड्रॉपडाउन जिनके मूल्य OnItemDataBound ईवेंट विधि के माध्यम से सेट होते हैं - वे रहते हैं जगह में "जमे हुए", भले ही कोड के माध्यम से कदम उठाने से पता चलता है कि विधि पोस्टबैक के दौरान चलती है, और नियंत्रण को अपने नए मूल्यों पर सेट किया जाना चाहिए। यदि मैं जाता हूं और कहने के लिए मैन्युअल रूप से छंटनी करता हूं, आधा मूल आकार, सुनिश्चित करें कि केवल उन वस्तुओं को दोहराया गया है, लेकिन चेकबॉक्स और ऐसे अभी भी उनके मूल मान बनाए रखते हैं।
तो मेरा सवाल है: इन तत्वों को पोस्टबैक पर बाकी सूचीदृश्य नियंत्रण तत्वों के साथ क्यों अपडेट नहीं किया जा रहा है? मुझे एहसास है कि मैं एएसपी.नेट में पेज लाइफसाइक्ल को गलत समझ रहा हूं या मुझे किसी तरह का बग मिला है।
इस बिंदु पर मुझे लगता है कि मुझे जावास्क्रिप्ट में पृष्ठ पर अधिक जटिल सॉर्टिंग ऑपरेशन को स्थानांतरित करना होगा, लेकिन यह मुश्किल होगा और यदि संभव हो तो मैं ऐसा करने से बचना चाहूंगा।
अपडेट: मैंने EnableViewState को गलत पर सेट करने का प्रयास किया है और यह इसे ठीक नहीं करता है। मैं किसी भी मामले में उस रणनीति का उपयोग नहीं कर सका क्योंकि पेज के अन्य हिस्सों (सेव) अंत में व्यूस्टेट पढ़ने पर भरोसा करते हैं।
अद्यतन: मैं इस उम्मीद में कुछ कोड के टुकड़े प्रदान कर रहा हूँ कि वे इस मुद्दे पर कुछ प्रकाश डाला सकता है:
पृष्ठ: हाइपरलिंक तत्व पोस्टबैक के बाद ठीक से अपडेट करेगा, लेकिन चेक बॉक्स जो अपने मूल्य है में सौंपा 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
टिम सही है - मुझे एक ही समस्या थी और पेजब्रेरेंडर पोस्टबैक पर काम करता है :) – Jason