2008-12-15 14 views
8

मेरे पास कुछ कोड है जो एक एएसपीनेट पृष्ठ पर दोहराव नियंत्रण में डेटाबेस मानों को प्रिंट करता है। हालांकि, लौटाए गए कुछ मूल्य शून्य/खाली हैं - और रिक्त रिक्त स्थान होने पर परिणाम बदसूरत लगते हैं।ASP.net पृष्ठ में सशर्त तर्क

आप एएसपीनेट नियंत्रण में सशर्त तर्क कैसे करते हैं यानी यदि कोई मौजूद है तो मूल्य प्रिंट करें, अन्यथा केवल अगले मान पर जाएं।

मुझे यह भी जोड़ना चाहिए - कि मैं मार्कअप को सशर्त भी बनाना चाहता हूं, जैसे कि कोई मूल्य नहीं है, मैं
टैग नहीं चाहता हूं।

यहां मेरे डेटाबेस से वापस आने वाले मूल्यों के प्रकार को दिखाने के लिए नीचे दिए गए कोड का एक स्निपेट है। (यह पता 2 के लिए बिल्कुल मूल्य नहीं है) के लिए आम है।

<div id="results"> 
    <asp:Repeater ID="repeaterResults" runat="server"> 
     <ItemTemplate> 
      Company:  <strong><%#Eval("CompanyName") %></strong><br /> 
      Contact Name: <strong><%#Eval("ContactName") %></strong><br /> 
      Address:  <strong><%#Eval("Address1")%></strong><br />      
          <strong><%#Eval("Address2")%></strong><br />.................. 

बहुत धन्यवाद

उत्तर

6

यह एक सुंदर व्यक्तिपरक भी इस रूप में यह पूरी तरह से आप कहाँ और कैसे अशक्त/खाली मूल्यों, और वास्तव में उपयोग करना चाहते पर निर्भर करता है होना करने के लिए जा रहा है जो उन दो तुम्हारे साथ काम कर रहे हैं में से एक ।

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

किसी भी तरह से मेरी व्यक्तिगत पसंद यह सुनिश्चित करने के लिए होगी कि आप यूआई स्तर पर भ्रम से बचने के लिए उस क्षेत्र के लिए कोई डेटा उपलब्ध नहीं था। की तर्ज पर सबसे खराब कुछ में:

<strong><% If (Eval("Address2").Length > 0) Then %><%#Eval("Address2")%><% Else %>No data available for Address 2<% End If %></strong><br /> 

इस तरह कम से कम उपयोगकर्ता जानता है कि कोई डेटा उपलब्ध है, बल्कि नहीं जानते हुए भी अगर कोई प्रणाली/प्रशासनिक त्रुटि हुई है की तुलना में।

आशा में मदद करता है :)

1

आप IsDBNull उपयोग कर सकते हैं (obj)

If IsDbNull(<%#Eval("Address2")%>) then 
    etc 
End If 
+0

यह सी # है: हालांकि IsDbNull() microsoft.visualbasic नाम स्थान –

+0

माध्यम से उपलब्ध है तो == DBNull.Value का उपयोग –

3

रहे हैं हो सकता है ऐसा करने के लिए तरीके कि, मैं आमतौर पर पुनरावर्तक के कार्यक्रम OnItemDataBound घटना होती है कि उपयोग कर रहा हूँ जब पुनरावर्तक के मद है एक डेटा आइटम के लिए बाध्य।

OnItemDataBound घटना को समझाने के लिए मान लें कि हमने एक फ़ील्ड के साथ दोहराया है जो हमेशा प्रदर्शित होता है (नाम) और वैकल्पिक फ़ील्ड जो प्रदर्शित नहीं होता है (वैकल्पिक)। वैकल्पिक क्षेत्र शून्य या खाली होने पर हम कुछ पूर्वनिर्धारित मान प्रदर्शित करना चाहते हैं।
ऐसा करने के लिए हमें पहले किसी विधि को इंगित करने के लिए पुनरावर्तक के OnItemDataBound ईवेंट को सेट करने की आवश्यकता है, और पुनरावर्तक के आइटम टेम्पलेट को भी बनाने के लिए। हम पुनरावर्तक के आइटम टेम्पलेट के भीतर किसी भी सर्वर नियंत्रण का उपयोग कर सकते हैं जिसे हम बाद में OnItemDataBound विधि में संदर्भित कर सकते हैं।

<asp:Repeater ID="repeaterResults" runat="server" OnItemDataBound="repeaterResult_ItemDataDataBound"> 
    <ItemTemplate> 
    <strong><%#Eval("Name") %></strong> 
    <asp:Literal runat="server" ID="ltlOption" /> 
    <br /> 
    </ItemTemplate></asp:Repeater> 

इसके अलावा मान लेते हैं कि हम साधारण वस्तुओं दो गुण हो रही है कि का एक संग्रह के लिए बाध्य होगा: नाम और विकल्प इस प्रकार की तरह:

public class SimpleEntity 
{ 
    public string Name {get;set;} 
    public string Option {get;set;} 
} 

अगला हम इस प्रकार repeaterResult_ItemDataDataBound विधि को लागू करेगा:

protected void repeaterResult_ItemDataDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    SimpleEntity ent = e.Item.DataItem as SimpleEntity; 
    Literal ltlOption = e.Item.FindControl("ltlOption") as Literal; 
    if (ent != null && ltlOption != null) 
    { 
    if (!string.IsNullOrEmpty(ent.Option)) 
    { 
     ltlOption.Text = ent.Option; 
    } 
    else 
    { 
     ltlOption.Text = "Not entered!"; 
    } 

    } 
} 

विधि ऊपर कार्यान्वित किया जाता है के रूप में, हम, अगर मौजूद है वैकल्पिक फ़ील्ड प्रदर्शित करेगा, जबकि वैकल्पिक फ़ील्ड शून्य या खाली स्ट्रिंग हम पूर्वपरिभाषित प्रदर्शित करेगा है अगर डी स्ट्रिंग "दर्ज नहीं किया गया!"।

8

2 गुणों के साथ कस्टम नियंत्रण में प्रत्येक मुख्य/मान जोड़े लपेटकर सुझाव देते हैं। यह नियंत्रण में ही प्रदर्शित करेगा ही अगर मान रिक्त नहीं है:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ShowPair.ascx.cs" Inherits="MyWA.ShowPair" %> 

<% if (!string.IsNullOrEmpty(Value)) 
    { %> 
<%=Key %> : <%=Value %> 
<% } %> 

और फिर पुनरावर्तक टेम्पलेट में नियंत्रण रख:

<asp:Repeater runat='server' ID="repeater1"> 
    <ItemTemplate> 
     <cst:ShowPair Key="Company Name:" Value="<%#((Company)Container.DataItem).CompanyName %>" runat="server"/> 
     <cst:ShowPair Key="Contact Name:" Value="<%#((Company)Container.DataItem).ContactName %>" runat="server" /> 
     <cst:ShowPair Key="Address 1:" Value="<%#((Company)Container.DataItem).Address1 %>" runat="server" /> 
    </ItemTemplate> 
    </asp:Repeater> 
0

मुझे लगता है कि यह एक बहुत पुरानी सवाल है, लेकिन मैं करना चाहते हैं जोड़ें कि शायद इस समस्या को संभालने का सबसे अच्छा तरीका डेटाबेस स्तर पर अधिक है, और हाँ - मुझे पता है कि ओपी ने किसी भी प्रकार का डेटा स्रोत निर्दिष्ट नहीं किया है। (- आप में से गधा और मुझे हाँ) कि वर्तमान भाषा इस्तेमाल किया जा रहा है कम से कम चलाना एसक्यूएल है

मैं बस ग्रहण करने के लिए जा रहा हूँ।

इस उद्देश्य से, मैं डेटा स्रोत का उपयोग करने के लिए यौगिक क्षेत्रों का उत्पादन करते हैं। एक पते ISNULL के मामले में खुशी से जो खेतों उपयोग में हैं देखने के लिए परीक्षण, और एक डिफ़ॉल्ट मान है, तो एक शून्य क्षेत्र का सामना करना पड़ा है होगा। इसके शीर्ष पर, लक्षित आउटपुट माध्यम में लाइन ब्रेक की अनुमति देने के लिए एक विभाजक चरित्र को शामिल किया जा सकता है। एक विकल्प अल्पविराम ', ' के रूप में अल्पविराम + एक स्थान का उपयोग करना है।

SELECT 
    ISNULL(src.address1 + ', ', '') + 
    ISNULL(src.address2 + ', ', '') + 
    ISNULL(src.address3 + ', ', '') + 
    ISNULL(src.address4 + ', ', '') + 
    ISNULL(src.postalcode, '') AS CompoundAddress 
... 

यह अपने आप के खिलाफ NULL का उपयोग करके काम करता है - NULL को जोड़ने एक NULL देता है, इसलिए मूल्य या तो हमारे अल्पविराम + अंतरिक्ष में शामिल होंगे लौटे या इसे रिक्त स्ट्रिंग वापस आ जाएगी।

इस मामले में कुछ इसी तरह अपना पता क्षेत्र के उत्पादन में 'चाल' के लिए किया जा सकता है माइक्रोसॉफ्ट एक्सेस ...

SELECT 
    (src.address1 + ', ') & 
    (src.address2 + ', ') & 
    (src.address3 + ', ') & 
    (src.address4 + ', ') & 
    (src.postalcode) As CompoundAddress 
... 

एम्परसेंड एक रिक्त स्ट्रिंग पर NULL में परिवर्तित कर देंगे, लेकिन एक ही अभी भी लागू होता है संभावित NULL फ़ील्ड में स्ट्रिंग का जोड़ा।

तो अब, हम अपने पते के उत्पादन ठीक से HTML में कर सकते हैं ...

<div id="results"> 
    <asp:Repeater ID="repeaterResults" runat="server"> 
     <ItemTemplate> 
      Company:  <strong><%#Eval("CompanyName") %></strong><br /> 
      Contact Name: <strong><%#Eval("ContactName") %></strong><br /> 
      Address:  <strong><%#Eval("CompoundAddress").ToString().Replace(", ", "<br />") %></strong><br /> 
संबंधित मुद्दे