2010-01-18 18 views
6

बनाते समय डेटाटेबल के माध्यम से Iterate मैं वर्तमान में ASP.NET, jQuery और JSON का उपयोग कर क्लाइंट-साइड पेजिंग समाधान लागू कर रहा हूं।एएसपी.नेट, सी # और बेनामी प्रकार - मैन्युअल रूप से बेनामी टाइप

मैं encosia से उत्कृष्ट लेख निम्नलिखित किया गया है: http://encosia.com/2008/08/20/easily-build-powerful-client-side-ajax-paging-using-jquery/

अपनी वेब विधि में मैं एक DataTable के रूप में डेटाबेस से मेरी डेटा पुनः प्राप्त:

DataTable categoryProducts = ProductViewerAccess.GetCategoryProducts 
     ("AA", 4, 0, Page.ToString(), out howManyPages, "FALSE", 0, "CostPrice", "asc", destinationList); 

मैं तो में DataTable से डेटा पुनः प्राप्त एक अनाम के प्रकार:

var feeds = 
     from feed in categoryProducts.AsEnumerable() 
     select new 
     { 
      Description = feed.Field<string>("description"), 
      MfPartNo = feed.Field<string>("MfPN"), 
      Inventory = feed.Field<Int32>("Inventory") 
     }; 

गुमनाम प्रकार तो क्लाइंट साइड करने के लिए वेब विधि से दिया जाता है:

वापसी फ़ीड। टेक (पेजसाइज);

एक टेम्पलेट तो निकालता है और फ़ील्ड दिखाई देते हैं:

<tbody> 
    {#foreach $T.d as post} 
    <tr> 
     <td> 
     {$T.post.Description} 
     <p>Mfr#: {$T.post.MfPartNo}</p> 
     </td> 
     <td>{$T.post.Inventory}</td> 
    </tr> 
    {#/for} 
    </tbody> 

यह सब अच्छा काम करता है।

हालांकि, मैं कुछ मूल्यांकन जांच करने के लिए कोड का विस्तार करना चाहता हूं (उदाहरण के लिए, डेटाटेबल में विभिन्न कॉलम न्यूल नहीं हैं) और अन्य प्री-प्रोसेसिंग (उदाहरण के लिए, छवि यूआरएल बनाने के लिए विभिन्न कार्यों को कॉल करें डेटा आईडी - डेटाटेबल में एक और कॉलम कोड खंड में दिखाया नहीं गया है) इससे पहले कि मैं डाटाटेबल की परिणामी पंक्तियों को क्लाइंट-साइड के रूप में अज्ञात प्रकार के रूप में वापस कर दूं।

असल में, मैं डेटाटेबल के माध्यम से पुन: प्रयास करना चाहता हूं, मूल्यांकन जांच और प्री-प्रोसेसिंग करना चाहता हूं, जबकि मैं अपना अनाम प्रकार मैन्युअल रूप से चलाता हूं। या शायद इसे हासिल करने का एक बेहतर तरीका है?

क्या वैसे भी मैं इसे प्राप्त कर सकता हूं?

सधन्यवाद

वाल्टर

उत्तर

2

मुझे लगता है कि नल के लिए जांच शायद कुछ ऐसा है जो सर्वर-साइड पर समझ में आता है। डगलस का वर्णन एक व्यावहारिक है। जैसा कि ऊपर दिखाया

var feeds = 
    from feed in categoryProducts.AsEnumerable() 
    select new 
    { 
     Description = feed.Field<string>("description"), 
     MfPartNo = feed.Field<string>("MfPN"), 
     // Return 0 if the inventory value is null. 
     Inventory = (int?)feed.Field("Inventory") ?? 0 
    }; 

ScottGu using the null coalescing operator to handle nulls concisely पर एक अच्छी पोस्ट है,: एक अन्य अशक्त मुद्दा आप गुमनाम प्रकार के संग्रह के रूप में बना रहे हैं संभाल करने के लिए है।

लिंक बनाने के लिए, ऐसा कुछ है जो मैं शायद क्लाइंट-साइड टेम्पलेट में करने का सुझाव दूंगा। आप जेएसओएन में भेजे गए बहुत से अनावश्यक डेटा को इस तरह से खत्म कर सकते हैं।ऐसा कुछ, उदाहरण के लिए:

<tbody> 
    {#foreach $T.d as post} 
    <tr> 
    <td> 
     <a href="/url/to/details.aspx?id={$T.post.ID}">{$T.post.Description}</a> 
     <p>Mfr#: {$T.post.MfPartNo}</p> 
    </td> 
    <td>{$T.post.Inventory}</td> 
    </tr> 
    {#/for} 
</tbody> 
1

कभी कभी मैं यह उपयोगी मूल्य मैं क्वेरी में बाद में उपयोग करने की आवश्यकता स्टोर करने के लिए LINQ का उपयोग कर "दो" कीवर्ड का उपयोग करने लगता है। मैं बाद में सरल नल चेक या अन्य चीजों के लिए इस चर का उपयोग कर सकते हैं। उदाहरण के लिए:

var feeds = 
    from feed in categoryProducts.AsEnumerable() 
    let MfPN = feed.Field<string>("MfPN") 
    // Get image url if MfPN is not null, else return default image url. 
    let Url = !string.IsNullOrEmpty(MfPN) ? GetImgUrl(MfPN) : “DefaultImage.jpg” 
     select new 
     { 
      Description = feed.Field<string>("description"), 
      MfPartNo = MfPN, 
      Inventory = feed.Field<Int32>("Inventory"), 
      ImageUrl = Url 
     }; 

केवल दूसरी बात करता है, तो बहुत आसान है LINQ क्वेरी कॉल करने से पहले DataTable पर अपने पूर्व प्रसंस्करण प्रदर्शन मुझे लगता है कि कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे