2010-05-14 16 views
5

मैं एएसपी.नेट एमवीसी पर चढ़ रहा हूं और देख रहा हूं कि मैं दृश्य में संदेश कैसे आउटपुट करता हूं। ऐसा कुछ करने का सबसे अच्छा तरीका क्या है? सहायकों? नियंत्रण? या बस जैसा है?एएसपी.नेट एमवीसी में सशर्त आउटपुट के लिए सर्वश्रेष्ठ अभ्यास?

<% if (ViewData.ContainsKey("message") && !string.IsNullOrEmpty(ViewData["message"].ToString())) { %> 
    <div class="notice"> 
     <%= ViewData["message"] %> 
    </div> 
<% } %> 

उत्तर

5

मैं एक HTML सहायक का प्रयोग करेंगे:

public static class HtmlExtensions 
{ 
    public static string GetMessage(this HtmlHelper htmlHelper) 
    { 
     var message = htmlHelper.ViewData["message"] as string; 
     if (string.IsNullOrEmpty(message)) 
     { 
      return string.Empty; 
     } 
     var builder = new TagBuilder("div"); 
     builder.AddCssClass("notice"); 
     builder.SetInnerText(message); 
     return builder.ToString(); 
    } 
} 

और ध्यान में रखते हुए:

<%= Html.GetMessage() %> 

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

+0

डैरिन, मैं इस दृष्टिकोण के रूप में यह बहुत वे आसान हमेशा डिफ़ॉल्ट रूप से किसी दृश्य पर <% = Html.GetMessage()%> जोड़ने के लिए और इसके बारे में सिर्फ 'भूल' होगी पसंद है। तो नियंत्रक तर्क यह तय कर सकता है कि व्यूडेटा ["संदेश"] में कुछ भी जोड़ना है या नहीं। अब, अगर केवल व्यूडाटा ('संदेश' के अलावा) के लिए कुंजी को आसानी से परिभाषित करने का कोई तरीका था, तो यह एक अच्छी तरह से आत्मनिर्भर एक्स्टेंसिबल छोटे सहायक होगा :) संपादित करें - मुझे लगता है कि एक अतिरिक्त कोर्स पैरामीटर को उस विशेषता को परिभाषित करने के लिए सहायक में जोड़ा जा सकता है - या क्या कोई 'बेहतर' तरीका है ?? –

+0

यह बहुत अच्छा लग रहा है, उदाहरण के लिए धन्यवाद। – RyanW

1

मुझे लगता है कि आपके पास जो स्थिति है वह सबसे आसान तरीका है। इसके लिए एक नियंत्रण थोड़ा "भारी" लगता है। शायद आप एक सहायक विधि अगर आप इसे खुद को दोहराना पाते हैं।

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