एक WebControl
में, मैं एक संपत्ति है Filters
इस तरह परिभाषित किया गया:क्या व्यूस्टेट में अज्ञात प्रतिनिधि को स्टोर करने का कोई तरीका है?
public Dictionary<string, Func<T, bool>> Filters
{
get
{
Dictionary<string, Func<T, bool>> filters =
(Dictionary<string, Func<T, bool>>)ViewState["filters"];
if (filters == null)
{
filters = new Dictionary<string, Func<T, bool>>();
ViewState["filters"] = filters;
}
return filters;
}
}
यह Webcontrol एक DataSource
, मैं इस संपत्ति बनाई क्योंकि मैं आसानी से डेटा को फ़िल्टर करने possiblity, जैसे करना चाहते है:
//in page load
DataSource.Filters.Add("userid", u => u.UserID == 8);
यह बहुत अच्छा काम करता है, फिर भी, अगर मैं इस के लिए कोड बदलने के लिए:
//in page load
int userId = int.Parse(DdlUsers.SelectedValue);
DataSource.Filters.Add("userid", u => u.UserID == userId);
यह wor नहीं है
प्रकार System.Web.UI.Page विधानसभा में serializable रूप में चिह्नित नहीं किया गया है '...': ks अब, मैं इस त्रुटि मिलती है।
क्या हुआ:
- serializer शब्दकोश का निरीक्षण किया। यह देखता है के बाद से प्रतिनिधि एक कक्षा में परिभाषित किया गया है यह एक गुमनाम प्रतिनिधि (यहाँ लैम्ब्डा)
- सम्मिलित हैं, तो, पूरी कक्षा को क्रमानुसार करने की कोशिश करता है इस मामले System.Web.UI.Page
- इस वर्ग के रूप में चिह्नित नहीं है serializable
- यह 3.
की वजह से एक अपवाद फेंकता है इस को हल करने के लिए किसी भी सुविधाजनक समाधान है? मैं उन सभी वेब पृष्ठों को चिह्नित नहीं कर सकता जहां मैं डेटा स्रोत को [serializable] के रूप में स्पष्ट कारणों से उपयोग करता हूं।
संपादित करें 1: कुछ मुझे समझ नहीं आता। अगर मैं Session
ऑब्जेक्ट में संग्रहीत करता हूं (BinaryFormatter
बनाम LosFormatter
ViewState
के लिए 0), यह काम करता है! मुझे नहीं पता कि यह कैसे संभव है। शायद BinaryFormatter
किसी भी वर्ग को क्रमबद्ध कर सकता है, यहां तक कि वे [serializable]
नहीं हैं?
संपादित 2:
void test()
{
Test test = new Test();
string param1 = "parametertopass";
test.MyEvent +=() => Console.WriteLine(param1);
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, test); //bang
}
}
[Serializable]
public class Test
{
public event Action MyEvent;
}
"यह काम करता है मुझे पता नहीं कैसे ... है!": सत्र डेटा रहता है सर्वर साइड, में स्मृति। जब आप 2+ सर्वर पर जाते हैं तो यह तोड़ना शुरू हो जाएगा। जानकारी –
THX। मुझे यकीन नहीं है कि दूसरा प्रस्ताव कैसे काम करेगा। फ़िल्टरसेटिंग क्लास के उदाहरण को तुरंत चालू और पकड़ेंगे कौन? अपने पेज है, वहाँ किसी भी जोखिम है कि serializer रूप में अच्छी तरह पेज तक पहुंच जाएगा नहीं है? क्या आप इस समाधान का उपयोग कैसे करें के बारे में अधिक कोड प्रदान कर सकते हैं? – tigrou