2008-12-12 18 views
14

तो मैं पूरी तरह से एएसपी.नेट, टेस्टेबिलिटी, एसओसी, एचटीएमएल नियंत्रण के बुनियादी किराये में खरीदता हूं ... यह कमाल है। हालांकि इसके लिए नया होना मेरे पास मार्कअप के साथ एक बड़ा लटका है। मुझे पता है कि यह क्लासिक एएसपी की मेरी नफरत से आता है, और मैं मदद नहीं कर सकता लेकिन ऐसा लगता है कि मैंने I see this पर ट्वाइलाइट जोन में प्रवेश किया है।मैं अपने एएसपी.NET एमवीसी मार्कअप में <% %> के अपने डर को कैसे प्राप्त करूं?

मैं नहीं जानता कि क्या विकल्प है (मैं सर्वर नियंत्रण, डेटा बाइंडिंग आदि ...? उपयोग कर सकते हैं)

+0

चित्र में कोड यद्यपि और कमोबेश व्यवस्थित दिखता है। – liggett78

उत्तर

11

ऐसे अनेक कार्य हैं मार्कअप को साफ करने में मदद कर सकते हैं, लेकिन मैं इस बात से सहमत प्राप्त कर सकते हैं थोड़ा टैग-सूपी।

  • आप कर सकते हैं make your own HTML helpers, विस्तार तरीकों का उपयोग कर तो आप के बजाय (MyClasst)ViewData["foo"].myProperty
ViewData.Model.myProperty अगर/किसी और तर्क, यात्रा, आदि
  • एस trongly type your views तो आप क्या कर सकते हैं में से कुछ दूर छिपा कर सकते हैं उत्पादन के आंकड़ों के

    उदाहरण के लिए इस एक विस्तार मैं बनाने के लिए बनाया है एक आरएसएस-spitter-बाहरी :)

    public static string RSSRepeater<T>(this HtmlHelper html, IEnumerable<T> rss) where T : IRSSable 
        { 
         StringBuilder result = new StringBuilder(); 
    
         if (rss.Count() > 0) 
         { 
          foreach (IRSSable item in rss) 
          { 
           result.Append("<item>").Append(item.GetRSSItem().InnerXml).Append("</item>"); 
          } 
         } 
    
         return result.ToString(); 
        } 
    

    तो में मेरे सामने के अंत में मेरे पास <%=Html.RSSRepeater(mydata)%> है जो बहुत अच्छा है।

  • +1

    एचटीएमएल हेल्पर्स अच्छे हैं, लेकिन कुछ मामलों में यह देखने के बजाए आपके एचटीएमएल को समेकित कोड में रखना लगभग खराब है। –

    +0

    मैं एक तरह से सहमत हूं, खासकर जब आप ऐसे माहौल में हों जहां फ्रंट एंड डेवलपर्स को मार्कअप को आसानी से बदलने में सक्षम होना चाहिए। – qui

    +0

    यह आरएसएस है, हालांकि: मार्कअप बहुत सख्त और अच्छी तरह से परिभाषित है। –

    4

    Avoiding tag soup पढ़ना उपयोगी हो सकता है। आम तौर पर आप सर्वर नियंत्रणों का उपयोग नहीं कर सकते हैं (कुछ हालांकि काम कर सकते हैं), कोई पोस्टबैक या व्यूस्टेट नहीं है। मुझे नहीं लगता कि आप डाटाबेसिंग का उपयोग कर सकते हैं (फिर अपवाद हो सकते हैं, मुझे यकीन नहीं है कि एएसपी.नेट एमवीसी दृश्य में सर्वर नियंत्रण का व्यवहार कैसे करता है।) - किसी सूची या सरणी को पास करने के लिए "डेटाबेस" करने का सबसे आसान तरीका है डेटा को देखने और एचटीएमएल बनाने के लिए foreach का उपयोग करें।

    +0

    यह एक महान पढ़ा गया था ... अभी भी इसे प्यार नहीं कर रहा है, लेकिन यह नियंत्रण सर्वर नियंत्रण से बाहर निकलने से बेहतर है ... हालांकि मुझे डाटाबेसिंग याद आती है ... स्नीफ स्नीफ। – Webjedi

    7

    1) सहायकों को इस तरह के Sparkline
    4) refactor के रूप में बड़े पृष्ठों/पुन: उपयोग के दृश्य कोड
    3) एक भिन्न प्रतिपादन इंजन का प्रयास करें, को तोड़ने के लिए एचटीएमएल शोर
    2) आंशिक दृश्य को कम आपके विचार भी कई if भी शामिल है बयान।

    1

    कुछ (सभी नहीं, केवल मामलों में यह समझ में आता है) अपने मॉडल में तर्क (आपकी तिथियों की तरह) प्रदर्शित करें। उदाहरण के लिए, आपके उदाहरण में आप एक कार्य। डिस्प्लेडेट स्ट्रिंग प्रॉपर्टी जोड़ सकते हैं जो .ToShortDateString() कॉल को संभालती है। फिर यदि यह कभी भी बदल जाता है, तो आप इसे एक ही स्थान पर बदलते हैं और यह दृश्य में कोड को छोटा करता है।

    एचटीएमएल हेल्पर अच्छे हैं, कभी-कभी। मुझे वास्तव में किसी वर्ग में कॉन्सटेनेटेड स्ट्रिंग्स या स्ट्रिंगबिल्डर में अपना एचटीएमएल पसंद नहीं है, लेकिन यदि आप कुछ ऐसा कर रहे हैं जो डेटा के कई अलग-अलग सेटों के साथ काम करता है तो वे इतने खराब नहीं हैं।

    मैं आपकी सी # कोड स्वरूपण वरीयताओं को उसी पंक्ति पर ब्रैकेट रखने के लिए भी बदल दूंगा। वह अव्यवस्था में कटौती करता है। दुर्भाग्यवश आपके पास कोड संपादक और HTML संपादक के बीच इसके लिए अलग-अलग सेटिंग्स नहीं हो सकती हैं, इसलिए आपको अपने कोड में भी इसका उपयोग करना होगा। यह दुनिया में सबसे बुरी चीज नहीं है।

    दूसरों ने जो कहा है वह भी मदद करता है: आंशिक विचारों और मजबूत-टाइपिंग का उपयोग करें।

    0

    यदि आप इसे स्वरूपित करने के बाद ctrl + z दबाते हैं तो यह स्वरूपण को पूर्ववत करता है और टाइपिंग नहीं करता है।

    मैं किसी भी बेहतर बयान

    0

    आप प्रदान की गई नियंत्रण से HTML के बारे में बात कर रहे हैं, मुझे डर लग रहा है कि यह नहीं मिलता है, तो सिर्फ इसलिए कि के रूप में एक ही लाइन पर पहले ब्रैकेट रखने के लिए यह उपयोगी पाते आपके पास एमवीसी में आपके व्यू के आस-पास एक अच्छा मानक-आधारित रैपर है। अनुकूलित नियंत्रण के बिना, आउटपुट अभी भी लगभग-1995 क्रैपी नेस्टेड टेबल कोड है।

    धन्यवाद, माइक्रोसॉफ्ट!

    0

    सर्वर पक्ष टिप्पणियां <%-- comment --%> ब्लॉक को अलग करने और पठनीयता बढ़ाने के लिए उपयोग करें। ब्लॉक को अलग करने के लिए अतिरिक्त लाइन स्पेसिंग का भी उपयोग करें (ऐसा लगता है कि कुछ कारणों से मेरी लाइन दूरी को बंद कर रहा है)।

     <%-- Go through each testimonial --%> 
         <% foreach (var testimonial in ViewData.Model.Testimonials) { %> 
    
         <div class="testimonialFrame"> 
          <div class="testimonialHeader"><%= testimonial.summaryText %></div> 
    
    
          <%-- Show video if available --%> 
          <% if (string.IsNullOrEmpty(testimonial.Video.FullURL) == false) { %> 
    
          <div style="padding-top:12px"> 
           <% Html.RenderAction("YouTubeControl", "Application", new { youTubeId = testimonial.Video.FullURL }); %> 
          </div> 
    
          <% } %> 
    
          <div class="roundedBox" style="margin-top:15px"> 
           <div id="txtTestimonialText" class="testimonialText paddedBox"><%= testimonial.TestimonialText %></div> 
          </div> 
    
          <div class="testimonialFooter"><%= testimonial.name %></div> 
         </div> 
    
         <% } %> 
    
    0

    बहुत कभी कभी सहायक तरीकों (मैं विस्तार सहायक तरीकों के बारे में नहीं बात कर रहा हूँ) का उपयोग दृश्य में ही एचटीएमएल ऑब्जेक्ट मॉडल का उपयोग करने में एचटीएमएल कोड लिखने के लिए। मैं तब तक इसका पुन: प्रयास नहीं करता जब तक कि आपके पास कुछ विचित्र तर्क न हो कि आप आसानी से दृश्य में लिख नहीं सकते। जब तक .aspx.cs में कोड दृश्य कोड है तो यह ठीक है।

    अपने दृश्य के .aspx फ़ाइल में:

    <%-- render section --%> 
    <% RenderTextSection(section); %> 
    

    अपने दृश्य की 'codebehind' आप HTML बनाने के लिए HtmlGenericControl का उपयोग में और उसके बाद निम्न पंक्ति यह पता लिखने के लिए:

    htmlControl.RenderControl(new HtmlTextWriter(Response.Output)); 
    

    मेरा पूरा विधि :

    protected void RenderTextSection(ProductSectionInfo item) 
    
        { 
         HtmlGenericControl sectionTextDiv = new HtmlGenericControl("div"); 
    
         bool previousHasBulletPoint = false; 
         System.Web.UI.HtmlControls.HtmlControl currentContainer = sectionTextDiv; 
    
         foreach (var txt in item.DescriptionItems) 
         { 
          if (!previousHasBulletPoint && txt.bp) 
          { 
           // start bulleted section 
           currentContainer = new HtmlGenericControl("UL"); 
           sectionTextDiv.Controls.Add(currentContainer); 
          } 
          else if (previousHasBulletPoint && !txt.bp) 
          { 
           // exit bulleted section 
           currentContainer = sectionTextDiv; 
          } 
    
          if (txt.bp) 
          { 
           currentContainer.Controls.Add(new HtmlGenericControl("LI") 
           { 
            InnerHtml = txt.t 
           }); 
          } 
          else 
          { 
           currentContainer.Controls.Add(new HtmlGenericControl() 
           { 
            InnerHtml = txt.t 
           }); 
          } 
    
          previousHasBulletPoint = txt.bp; 
         } 
    
         sectionTextDiv.RenderControl(new HtmlTextWriter(Response.Output)); 
        } 
    
    +0

    कोड-बैक का उपयोग अब फेंक दिया गया है। – LaptopHeaven

    +0

    सामान जो आमतौर पर ** ** कोड-बैक (यानी ईवेंट हैंडलर) में है, अब फेंक दिया गया है, लेकिन यह दृष्टिकोण निश्चित रूप से उचित है। क्या आप केवल फ्राइंग के लिए इसे फेंक रहे हैं? – JoshJordan

    +0

    @josh बहुत सारे आसपास जा रहा है –

    0

    मैं सुझाव देता हूं कि मोनोरेल्स का उपयोग करने वाले वेग टेम्पलेट इंजन को देखकर मैं सुझाव दूंगा। एएसपी.नेट एमवीसी मॉडल मोनोरेल्स प्रारूप पर बहुत करीब से हैं, इसलिए वेग टेम्पलेट का उपयोग करना काफी आसान है।

    Click here to learn more

    1

    मुझे पृष्ठभूमि रंग के समान ही मेरे "<%%>" टैग के लिए सिंटैक्स हाइलाइट करना पसंद है। मैं अपने "<%%>" टैग के लिए एक काले रंग की पृष्ठभूमि और चांदी-आश (हाथ पर विशिष्ट रंग नहीं है) रंग का उपयोग करता हूं। इसके अलावा यहां अन्य सुझावों को आपके कोड को और अधिक पठनीय बनाना चाहिए था। बेशक, आप हमेशा एक और दृश्य इंजन (यह एमवीसी की सुंदरता है!)

    1

    मैं कुछ अन्य व्यू इंजनों को देखता हूं, मैं व्यक्तिगत रूप से वास्तव में Spark view engine पसंद करता हूं लेकिन वहां कई अन्य लोग हैं।

    स्कॉट Hanselman चिंगारी और Nhaml मार्कअप में से कुछ के टुकड़े है कि आप को देखने को देखने के लिए कर सकते हैं के साथ को देखकर एक महान पोस्ट किया था अगर यह फिट बैठता है अपने asthetics :)

    http://www.hanselman.com/blog/TheWeeklySourceCode30SparkAndNHamlCrazyASPNETMVCViewEngines.aspx

    0

    खैर अब आप Razor बाहर की कोशिश कर सकते

    मैं सिर्फ उम्मीद है कि "@" आप भी डरा नहीं होगा (ASP.NET MVC 3 में): पी

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