استخدم ASP.NET MVC كمحرك قالب البريد الإلكتروني: فكرة جيدة؟

StackOverflow https://stackoverflow.com/questions/3665567

سؤال

هل ستكون فكرة جيدة وقابلة للتنفيذ ، استخدام محرك عرض ASP.NET MVC لتقديم HTML ليتم إرساله عبر البريد الإلكتروني؟

أعلم أنه من الممكن السماح للعرض بإعداد سلسلة. بحيث يمكن استخدامها لإنشاء رسالة البريد. نظرًا لأن ASP.NET MVC تستخدم بالفعل في التطبيق ، فأنا أستخدم جميع أشياء ASP.NET MVC العملية دون الحاجة إلى استخدام Brail أو NVELOCITY لـ "طرق عرض البريد الخاصة بي".

فكره جيده؟ أي تحذيرات؟ أمثلة :) ؟

هل كانت مفيدة؟

المحلول

نعم إنها فكرة جيدة و سهل التنفيذ نسبيا.

نصائح أخرى

أنا شخصياً أعتقد أنها فكرة جيدة. بالتأكيد أفضل من وضع قطعة من العلامات مع العناصر النائبة في قاعدة البيانات.

العيب هو أنك ستحتاج إلى Visual Studio لتحرير تلك القوالب ثم إعادة ترجمة المشروع وإعادة نشرها. لن تكون قادرًا على "الاستعانة بمصادر خارجية" العمل مع قوالب للموظفين الآخرين غير التقنيين.

ونعم ، إن إضافة قوالب جديدة تتطلب أيضًا تدخلك الشخصي.

هنا ، فإن إصداري من 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);

أتمنى أن يساعدك هذا..

جيم

يمكنك استخدام MVCMailer Nuget - يستخدم قوالب عرض MVC وتكتب فقط سطرًا واحد من التعليمات البرمجية للقيام بذلك!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top