2010-09-08 6 views
5

क्या यह एक अच्छा विचार और निष्पादन योग्य होगा, एएसपी.नेट एमवीसी व्यू इंजन का उपयोग ईमेल द्वारा भेजे जाने के लिए एचटीएमएल प्रस्तुत करने के लिए किया जाएगा?ईमेल टेम्पलेट इंजन के रूप में एएसपी.नेट एमवीसी का उपयोग करें: अच्छा विचार?

मुझे पता है कि दृश्य को स्ट्रिंग में प्रस्तुत करना संभव है। तो इसका उपयोग मेल संदेश बनाने के लिए किया जा सकता है। चूंकि एएसपी.नेट एमवीसी पहले ही एप्लिकेशन में उपयोग किया जा रहा है, इसलिए मुझे अपने "मेल व्यू" के लिए ब्रेल या एनवेलोजिटी का उपयोग किए बिना सभी व्यावहारिक एएसपी.नेट एमवीसी सामानों का उपयोग करना पड़ता है।

अच्छा विचार? कोई चेतावनी? उदाहरण :) ?

+1

हाँ, बहुत अच्छा काम करता है - आप इसे देखना चाहते हैं: http://razorengine.codeplex.com/ –

उत्तर

4

हां यह एक अच्छा विचार है और relatively easy to implement है।

+0

धन्यवाद, एसिंक व्यवहार के बारे में क्या? मैं पेज अनुरोधों को ब्लॉक करने के लिए ईमेल को पार्सिंग और भेजना नहीं चाहता हूं। – Bertvan

+0

इस मामले में आप इसे एक नए थ्रेड में या AsyncController का उपयोग करके कर सकते हैं। –

+0

ठीक है, चलो देखते हैं कि यह काम करेगा :) – Bertvan

1

मुझे व्यक्तिगत रूप से लगता है कि यह एक अच्छा विचार है। डेटाबेस में प्लेसहोल्डर के साथ मार्कअप का एक टुकड़ा डालने से निश्चित रूप से बेहतर है।

नुकसान यह है कि आपको उन टेम्पलेट्स को संपादित करने के लिए विजुअल स्टूडियो की आवश्यकता होगी, फिर परियोजना को पुन: संकलित और पुन: नियोजित करें। आप अन्य गैर-तकनीकी कर्मचारियों को टेम्पलेट्स के साथ काम करने "आउटसोर्स" करने में सक्षम नहीं होंगे।

और हां, नए टेम्पलेट्स को जोड़ने से आपके व्यक्तिगत हस्तक्षेप की भी आवश्यकता होगी।

+0

रीकंपलिंग वास्तव में सबसे बड़ी चेतावनी है। यही कारण है कि, हम इस दृष्टिकोण से दूर कदम उठा रहे हैं और एक्सएसएलटी को देखना शुरू कर रहे हैं ... – Bertvan

1

यहाँ, एक विस्तार पद्धति के रूप में RenderPartialToString की मेरी संस्करण है (जो भी पथ आदि का ख्याल रखता है ..):

public static class ExtensionMethods 
{ 
    public static string RenderPartialToString(this ControllerBase controller, string partialName, object model) 
    { 
     var vd = new ViewDataDictionary(controller.ViewData); 
     var vp = new ViewPage 
     { 
      ViewData = vd, 
      ViewContext = new ViewContext(), 
      Url = new UrlHelper(controller.ControllerContext.RequestContext) 
     }; 

     ViewEngineResult result = ViewEngines 
            .Engines 
            .FindPartialView(controller.ControllerContext, partialName); 

     if (result.View == null) 
     { 
      throw new InvalidOperationException(
      string.Format("The partial view '{0}' could not be found", partialName)); 
     } 
     var partialPath = ((WebFormView)result.View).ViewPath; 

     vp.ViewData.Model = model; 

     Control control = vp.LoadControl(partialPath); 
     vp.Controls.Add(control); 

     var sb = new StringBuilder(); 

     using (var sw = new StringWriter(sb)) 
     { 
      using (var tw = new HtmlTextWriter(sw)) 
      { 
       vp.RenderControl(tw); 
      } 
     } 
     return sb.ToString(); 
    } 
} 

उपयोग:

return this.RenderPartialToString("YourPartialView", yourModel); 

आशा है कि यह मदद करता है ..

जिम

0

आप एमवीसीमेलर नुगेट का उपयोग कर सकते हैं - यह एमवीसी व्यू टेम्पलेट्स का उपयोग करता है और आप बस एक लिखते हैं ऐसा करने के लिए कोड की एक पंक्ति!

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