2009-01-21 13 views
5

मैं वर्तमान में सी # एएसपी.नेट एमवीसी का उपयोग कर एक ई-कॉमर्स साइट बना रहा हूं और अभी एक समस्या आई है। उत्पाद पृष्ठों और खोज परिणाम पृष्ठों जैसे पृष्ठों पर, मुझे अपने नियंत्रक से डेटा की सूची को व्यूपेज में पास करना होगा और यह ठीक काम करता है। हालांकि, व्यूडाटा शून्य के बराबर होने पर एक शून्य संदर्भ अपवाद होता है। यह व्यूपेज के अंदर होता है जब यह व्यूडेटा के माध्यम से loops और उत्पादों या समीक्षा प्रदर्शित करता है।एएसपी.नेट एमवीसी व्यूडाटा नल

//ProductController.cs

public ActionResult Products_Sub(string category, int page) 
{ 
ViewData["Products"] = database.GetByCategory(category, page); 
return View(); 
} 

//ViewPage.cs - उत्पाद पाश

<ul> foreach (E_Store.Models.Product product in ViewData["Products"] as 
List<e_store.models.product>) 
{%> 
<li> 
<img alt="<%= product.Title%>" src="<%= product.Thumbnail %>" /> 
<a href="/<%=product.Category %>/<%= product.SubCategory %>/<%= product.ASIN %>/1"> 
<%=product.Title%></a> 
</li> 
}%> 
</ul>  

अशक्त संदर्भ अपवाद तब होता है जब कोड का निम्न भाग तक पहुँच जाता है:

<ul> foreach (E_Store.Models.Product product in ViewData["Products"] as 

मैं यह जानना चाहता हूं कि if बयानों का उपयोग किए बिना, इस प्रकार की त्रुटि को पकड़ने का सबसे अच्छा तरीका यह है कि यह देखने के लिए कि यह शून्य है या नहीं।

यदि कोई ऐसा करने का एक अच्छा तरीका जानता है तो मुझे वास्तव में जानना अच्छा लगेगा।

उत्तर

7

आपके मामले में मेरा डेटाबेस होगा। GetByCategory (श्रेणी, पृष्ठ) विधि बस शून्य की बजाय खाली सूची लौटाती है, इस प्रकार आपके foreach स्टेटमेंट में लूप के लिए कोई डेटा नहीं होगा लेकिन आपको नहीं मिलेगा एक शून्य अपवाद।

मामले है कि आप एक सूची के साथ काम नहीं कर रहे हैं और आइटम रिक्त है में, हम

Html.Encode(ViewData.Eval("Field")) 

का उपयोग आइटम के एचटीएमएल मूल्य है, यह "" लौटाएंगे यदि आइटम रिक्त है पाने के लिए।

+0

वाह !, आप आपके उत्तर के लिए बहुत बहुत धन्यवाद, मैं विश्वास नहीं कर सकता मुझे लगता है कि कभी नहीं सोचा :) पहले धन्यवाद मुझे पता है! –

2

आप हमेशा इस तरह अशक्त कोलेसिंग ऑपरेटर इनलाइन का उपयोग कर सकते हैं:

<%= product.Title ?? "" %> 

..लेकिन तुम सिर्फ खाली विशेषताओं के साथ टैग के साथ खत्म हो जाएगा। आप जो चाहते हैं उसकी जांच न करें।

आपको कहीं भी उपयोग करने की आवश्यकता होगी। समस्या इसके लिए बुलाती है। लेकिन सवाल यह है कि "आप इसे गन्दा बनाये बिना कहां रख सकते हैं?"

मैं ठीक है अगर पूरी चीज को एक में लपेटूं। यदि आप शायद अपने लूप के प्रत्येक आइटम के लिए एक HTML एक्सटेंशन विधि का प्रयास नहीं कर रहे हैं। व्यूडाटा मॉडल ऑब्जेक्ट में पास करें और शायद बेल्ट की स्थिति को निकालने के लिए परीक्षण करें। मैं Html.Encode() को Html.Efcode() को अधिभारित करता हूं। IfEncode (स्थिति, stringIfTrue, stringIfFalse) आप कुछ समान कोशिश करेंगे, लेकिन पूरी छवि और एंकर समूह के लिए। किसी और हो सकता है कि देखने के लिए पीछे कोड में समूह का निर्माण और सिर्फ उदाहरण ..for एक

<% =GetImageAndLinkHtml() %> 

का उपयोग करें।

यदि आप फिर से और अधिक जानकारी की जरूरत है

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