Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RazorEngine布局_C#_Razorengine - Fatal编程技术网

C# RazorEngine布局

C# RazorEngine布局,c#,razorengine,C#,Razorengine,我正在使用Razor引擎解析电子邮件模板的主体。是否可以定义布局并包含其他.cshtml文件?例如,一个普通的页眉和页脚。你可以轻松地用Razor做很多事情;然而,那个特殊的项目似乎把你能做的很多剃须刀引擎的东西都抽象掉了(这是好的也是坏的)。在您的情况下,听起来您最好实现自己的Razor解决方案(实际上没有那么糟糕),然后您可以让您的模板很容易地抛出异常或引入其他内容 比如,;滚动您自己的解决方案允许您为razor模板创建一个基类,它可以通过调用其他模板公开拉入“部分视图”的能力。此外,如果某

我正在使用Razor引擎解析电子邮件模板的主体。是否可以定义布局并包含其他.cshtml文件?例如,一个普通的页眉和页脚。

你可以轻松地用Razor做很多事情;然而,那个特殊的项目似乎把你能做的很多剃须刀引擎的东西都抽象掉了(这是好的也是坏的)。在您的情况下,听起来您最好实现自己的Razor解决方案(实际上没有那么糟糕),然后您可以让您的模板很容易地抛出异常或引入其他内容


比如,;滚动您自己的解决方案允许您为razor模板创建一个基类,它可以通过调用其他模板公开拉入“部分视图”的能力。此外,如果某些属性为null,则可以执行模型检查并引发异常

在这两篇文章的帮助下,我得到了通用模板和布局:

这是我的解决方案:

解决方案1: 布局

public class MailClient
    {
        public MailClient()
        {
            SmtpClient = new SmtpClient(MailConfiguration.Host)
            {
                Port = MailConfiguration.Port,
                Credentials = new NetworkCredential
                {
                    UserName = MailConfiguration.UserName,
                    Password = MailConfiguration.Password
                }
            };
        }

        public SmtpClient SmtpClient { get; }
    }
用于设置_布局

@{
    _Layout = "Layout.cshtml";
    ViewBag.Title = Model.Title;
 }
页脚

@section Footer 
{
   @RenderPart("Footer.cshtml")
}
@section Footer 
{
   @Include("Footer.cshtml")
}
public class TemplateResolver : ITemplateResolver
{
    public string Resolve(string name)
    {
        if (name == null)
        {
            throw new ArgumentNullException("name");
        }

        string path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Templates", name);
        return File.ReadAllText(path, System.Text.Encoding.Default);
    }
}
Layout.cshtml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>
    <head>
    </head>
    <body>
        <div id="content">
            @RenderBody()
        </div> 
        @if (IsSectionDefined("Footer"))
        { 
            <div id="footer">
                @RenderSection("Footer")
            </div>
        }
    </body> 
</html>
@using RazorEngine.Templating
@inherits TemplateBase<myviewmodel>

<h1>Hello People</h1>
<p>@Model</p>
解析器

@section Footer 
{
   @RenderPart("Footer.cshtml")
}
@section Footer 
{
   @Include("Footer.cshtml")
}
public class TemplateResolver : ITemplateResolver
{
    public string Resolve(string name)
    {
        if (name == null)
        {
            throw new ArgumentNullException("name");
        }

        string path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Templates", name);
        return File.ReadAllText(path, System.Text.Encoding.Default);
    }
}
配置

TemplateServiceConfiguration templateConfig = new TemplateServiceConfiguration
{
     Resolver = new TemplateResolver()
};
Razor.SetTemplateService(new TemplateService(templateConfig));
松饼人更新 指定模板并呈现字符串

var templateResolver = Razor.Resolve("Registration.cshtml");
return templateResolver.Run(new ExecuteContext());
另外,我和这个链接上的其他人在使用
\u布局
时遇到了问题,而
布局
工作正常


“_Layout”是旧语法。在未来的版本中,它被更新为“布局”

使用RazorEngine实现布局的最简单方法是替换布局的@RenderBody()中模板返回的内容:

 var finalHtml = layout.Replace(@"@RenderBody()", templateHtml);
例如:

<html>
<body style="margin: 0; padding: 0;">
    <div style="width:100%; display:block; float:left; height:100%;">
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr>
                <td width="37" style="background-color: #ffffff;"></td>
                <td width="200" style="background-color: #ffffff">
                    <a href="@Url("")">Send Mail Logo</a>                    
                </td>
                <td style="background-color: #ffffff;">
                    &nbsp;

                </td>
                <td width="126" style="background-color: #ffffff;">
                    <img src="@Url("Images/mail/social-media.png")" alt="" width="126" height="73" border="0" usemap="#Map" />
                </td>
            </tr>
        </table>
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr height="7">
                <td style="background-color: #ffffff;" colspan="3"></td>
            </tr>
            <tr height="54">
                <td colspan="3"></td>
            </tr>
            <tr>
                <td width="37">&nbsp;</td>
                <td style="font-family: Myriad, 'Helvetica Neue',Arial,Helvetica,sans-serif; font-size: 11pt; color: #6b6c6f; line-height: 24px;">
                    {{BODY}}
                </td>
                <td width="37">&nbsp;</td>
            </tr>

            <tr height="55">
                <td style="line-height: 0;" colspan="3">&nbsp;</td>
            </tr>
            <tr height="11">
                <td background="@Url("/Images/mail/dotted-line.png")" colspan="3" style="line-height: 0;">&nbsp;</td>
            </tr>
        </table>
    </div>
    <map name="Map" id="Map">
        <area shape="rect" coords="28,29,51,51" href="#" alt="Twitter" />
        <area shape="rect" coords="56,28,78,52" href="#" alt="Google+" />
        <area shape="rect" coords="84,28,104,51" href="#" alt="LinkedIn" />
    </map>
</body>
</html>
@using yourProjectnamespace.LanguageResources.Mail
@model ConfirmEmail

@MailTemplateResource.YouHaveLoggedIn

<a href="@Url(string.Format("/User/Confirmemail?EmailId={0}", Model.UserId))">@MailTemplateResource.ClickHere</a> 
public class CustomTemplateBase<T> : TemplateBase<T>
    {
        public string Url(string url)
        {
            return MailConfiguration.BaseUrl + url.TrimStart('/');
        }          
    }
public class Mail
    {
        private static readonly IRazorEngineService RazorEngine;

        static Mail()
        {
            var config = new TemplateServiceConfiguration
            {
                BaseTemplateType = typeof(CustomTemplateBase<>),
                TemplateManager = new EmbeddedTemplateManager(typeof(Mail).Namespace + ".Templates"),
                Namespaces = { "Add CurrentProjectName", "Add CurrentProjectName .Models" },
                CachingProvider = new DefaultCachingProvider()
            };
            RazorEngine = RazorEngineService.Create(config);
        }

        public Mail(string templateName)
        {
            TemplateName = templateName;
            ViewBag = new DynamicViewBag();
        }

        public string TemplateName { get; set; }

        public object Model { get; set; }

        public DynamicViewBag ViewBag { get; set; }

        public string GenerateBody()
        {
            var layout = RazorEngine.RunCompile("_Layout", model: null);
            var body = RazorEngine.RunCompile(TemplateName, Model.GetType(), Model);
            return layout.Replace("{{BODY}}", body);
        }

        public MailMessage Send(Guid key, string to, string subject, string cc = null)
        {
            var email = new MailMessage()
            {
                From = MailConfiguration.From,
                Body = GenerateBody(),
                IsBodyHtml = true,
                Subject = subject,
                BodyEncoding = Encoding.UTF8
            };

            email.Headers.Add("X-MC-Metadata", "{ \"key\": \"" + key.ToString("N") + "\" }");         

            foreach (var sendTo in to.Split(' ', ',', ';'))
            {
                email.To.Add(sendTo);
            }

            if (cc != null)
            {
                foreach (var sendCC in cc.Split(' ', ',', ';'))
                {
                    email.CC.Add(sendCC);
                }
            }

            var smtp = new MailClient().SmtpClient;
            smtp.EnableSsl = true;
            smtp.Send(email);
            return email;
        }
    }

    public class Mail<TModel> : Mail where TModel : class
    {
        public Mail(string templateName, TModel mailModel) : base(templateName)
        {
            Model = mailModel;
        }
    }
public class MailConfiguration
    {
        private static string GetAppSetting(string key)
        {
            var element = ConfigurationManager.AppSettings["Mail:" + key];
            return element ?? string.Empty;
        }

        public static string BaseUrl => GetAppSetting("BaseUrl");     

        public static string Host => GetAppSetting("Host");

        public static int Port => Int32.Parse(GetAppSetting("Port"));

        public static string UserName => GetAppSetting("Username");

        public static string Password => GetAppSetting("Password");

        public static MailAddress From => new MailAddress(GetAppSetting("From"));
    }
您的\u Layout.cshtml带有典型的@RenderBody()


实现邮件功能的完全定制解决方案

添加RazorEngine的nuget数据包

创建布局模板(.cshtml):

<html>
<body style="margin: 0; padding: 0;">
    <div style="width:100%; display:block; float:left; height:100%;">
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr>
                <td width="37" style="background-color: #ffffff;"></td>
                <td width="200" style="background-color: #ffffff">
                    <a href="@Url("")">Send Mail Logo</a>                    
                </td>
                <td style="background-color: #ffffff;">
                    &nbsp;

                </td>
                <td width="126" style="background-color: #ffffff;">
                    <img src="@Url("Images/mail/social-media.png")" alt="" width="126" height="73" border="0" usemap="#Map" />
                </td>
            </tr>
        </table>
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr height="7">
                <td style="background-color: #ffffff;" colspan="3"></td>
            </tr>
            <tr height="54">
                <td colspan="3"></td>
            </tr>
            <tr>
                <td width="37">&nbsp;</td>
                <td style="font-family: Myriad, 'Helvetica Neue',Arial,Helvetica,sans-serif; font-size: 11pt; color: #6b6c6f; line-height: 24px;">
                    {{BODY}}
                </td>
                <td width="37">&nbsp;</td>
            </tr>

            <tr height="55">
                <td style="line-height: 0;" colspan="3">&nbsp;</td>
            </tr>
            <tr height="11">
                <td background="@Url("/Images/mail/dotted-line.png")" colspan="3" style="line-height: 0;">&nbsp;</td>
            </tr>
        </table>
    </div>
    <map name="Map" id="Map">
        <area shape="rect" coords="28,29,51,51" href="#" alt="Twitter" />
        <area shape="rect" coords="56,28,78,52" href="#" alt="Google+" />
        <area shape="rect" coords="84,28,104,51" href="#" alt="LinkedIn" />
    </map>
</body>
</html>
@using yourProjectnamespace.LanguageResources.Mail
@model ConfirmEmail

@MailTemplateResource.YouHaveLoggedIn

<a href="@Url(string.Format("/User/Confirmemail?EmailId={0}", Model.UserId))">@MailTemplateResource.ClickHere</a> 
public class CustomTemplateBase<T> : TemplateBase<T>
    {
        public string Url(string url)
        {
            return MailConfiguration.BaseUrl + url.TrimStart('/');
        }          
    }
public class Mail
    {
        private static readonly IRazorEngineService RazorEngine;

        static Mail()
        {
            var config = new TemplateServiceConfiguration
            {
                BaseTemplateType = typeof(CustomTemplateBase<>),
                TemplateManager = new EmbeddedTemplateManager(typeof(Mail).Namespace + ".Templates"),
                Namespaces = { "Add CurrentProjectName", "Add CurrentProjectName .Models" },
                CachingProvider = new DefaultCachingProvider()
            };
            RazorEngine = RazorEngineService.Create(config);
        }

        public Mail(string templateName)
        {
            TemplateName = templateName;
            ViewBag = new DynamicViewBag();
        }

        public string TemplateName { get; set; }

        public object Model { get; set; }

        public DynamicViewBag ViewBag { get; set; }

        public string GenerateBody()
        {
            var layout = RazorEngine.RunCompile("_Layout", model: null);
            var body = RazorEngine.RunCompile(TemplateName, Model.GetType(), Model);
            return layout.Replace("{{BODY}}", body);
        }

        public MailMessage Send(Guid key, string to, string subject, string cc = null)
        {
            var email = new MailMessage()
            {
                From = MailConfiguration.From,
                Body = GenerateBody(),
                IsBodyHtml = true,
                Subject = subject,
                BodyEncoding = Encoding.UTF8
            };

            email.Headers.Add("X-MC-Metadata", "{ \"key\": \"" + key.ToString("N") + "\" }");         

            foreach (var sendTo in to.Split(' ', ',', ';'))
            {
                email.To.Add(sendTo);
            }

            if (cc != null)
            {
                foreach (var sendCC in cc.Split(' ', ',', ';'))
                {
                    email.CC.Add(sendCC);
                }
            }

            var smtp = new MailClient().SmtpClient;
            smtp.EnableSsl = true;
            smtp.Send(email);
            return email;
        }
    }

    public class Mail<TModel> : Mail where TModel : class
    {
        public Mail(string templateName, TModel mailModel) : base(templateName)
        {
            Model = mailModel;
        }
    }
public class MailConfiguration
    {
        private static string GetAppSetting(string key)
        {
            var element = ConfigurationManager.AppSettings["Mail:" + key];
            return element ?? string.Empty;
        }

        public static string BaseUrl => GetAppSetting("BaseUrl");     

        public static string Host => GetAppSetting("Host");

        public static int Port => Int32.Parse(GetAppSetting("Port"));

        public static string UserName => GetAppSetting("Username");

        public static string Password => GetAppSetting("Password");

        public static MailAddress From => new MailAddress(GetAppSetting("From"));
    }
}

创建邮件类:

<html>
<body style="margin: 0; padding: 0;">
    <div style="width:100%; display:block; float:left; height:100%;">
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr>
                <td width="37" style="background-color: #ffffff;"></td>
                <td width="200" style="background-color: #ffffff">
                    <a href="@Url("")">Send Mail Logo</a>                    
                </td>
                <td style="background-color: #ffffff;">
                    &nbsp;

                </td>
                <td width="126" style="background-color: #ffffff;">
                    <img src="@Url("Images/mail/social-media.png")" alt="" width="126" height="73" border="0" usemap="#Map" />
                </td>
            </tr>
        </table>
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr height="7">
                <td style="background-color: #ffffff;" colspan="3"></td>
            </tr>
            <tr height="54">
                <td colspan="3"></td>
            </tr>
            <tr>
                <td width="37">&nbsp;</td>
                <td style="font-family: Myriad, 'Helvetica Neue',Arial,Helvetica,sans-serif; font-size: 11pt; color: #6b6c6f; line-height: 24px;">
                    {{BODY}}
                </td>
                <td width="37">&nbsp;</td>
            </tr>

            <tr height="55">
                <td style="line-height: 0;" colspan="3">&nbsp;</td>
            </tr>
            <tr height="11">
                <td background="@Url("/Images/mail/dotted-line.png")" colspan="3" style="line-height: 0;">&nbsp;</td>
            </tr>
        </table>
    </div>
    <map name="Map" id="Map">
        <area shape="rect" coords="28,29,51,51" href="#" alt="Twitter" />
        <area shape="rect" coords="56,28,78,52" href="#" alt="Google+" />
        <area shape="rect" coords="84,28,104,51" href="#" alt="LinkedIn" />
    </map>
</body>
</html>
@using yourProjectnamespace.LanguageResources.Mail
@model ConfirmEmail

@MailTemplateResource.YouHaveLoggedIn

<a href="@Url(string.Format("/User/Confirmemail?EmailId={0}", Model.UserId))">@MailTemplateResource.ClickHere</a> 
public class CustomTemplateBase<T> : TemplateBase<T>
    {
        public string Url(string url)
        {
            return MailConfiguration.BaseUrl + url.TrimStart('/');
        }          
    }
public class Mail
    {
        private static readonly IRazorEngineService RazorEngine;

        static Mail()
        {
            var config = new TemplateServiceConfiguration
            {
                BaseTemplateType = typeof(CustomTemplateBase<>),
                TemplateManager = new EmbeddedTemplateManager(typeof(Mail).Namespace + ".Templates"),
                Namespaces = { "Add CurrentProjectName", "Add CurrentProjectName .Models" },
                CachingProvider = new DefaultCachingProvider()
            };
            RazorEngine = RazorEngineService.Create(config);
        }

        public Mail(string templateName)
        {
            TemplateName = templateName;
            ViewBag = new DynamicViewBag();
        }

        public string TemplateName { get; set; }

        public object Model { get; set; }

        public DynamicViewBag ViewBag { get; set; }

        public string GenerateBody()
        {
            var layout = RazorEngine.RunCompile("_Layout", model: null);
            var body = RazorEngine.RunCompile(TemplateName, Model.GetType(), Model);
            return layout.Replace("{{BODY}}", body);
        }

        public MailMessage Send(Guid key, string to, string subject, string cc = null)
        {
            var email = new MailMessage()
            {
                From = MailConfiguration.From,
                Body = GenerateBody(),
                IsBodyHtml = true,
                Subject = subject,
                BodyEncoding = Encoding.UTF8
            };

            email.Headers.Add("X-MC-Metadata", "{ \"key\": \"" + key.ToString("N") + "\" }");         

            foreach (var sendTo in to.Split(' ', ',', ';'))
            {
                email.To.Add(sendTo);
            }

            if (cc != null)
            {
                foreach (var sendCC in cc.Split(' ', ',', ';'))
                {
                    email.CC.Add(sendCC);
                }
            }

            var smtp = new MailClient().SmtpClient;
            smtp.EnableSsl = true;
            smtp.Send(email);
            return email;
        }
    }

    public class Mail<TModel> : Mail where TModel : class
    {
        public Mail(string templateName, TModel mailModel) : base(templateName)
        {
            Model = mailModel;
        }
    }
public class MailConfiguration
    {
        private static string GetAppSetting(string key)
        {
            var element = ConfigurationManager.AppSettings["Mail:" + key];
            return element ?? string.Empty;
        }

        public static string BaseUrl => GetAppSetting("BaseUrl");     

        public static string Host => GetAppSetting("Host");

        public static int Port => Int32.Parse(GetAppSetting("Port"));

        public static string UserName => GetAppSetting("Username");

        public static string Password => GetAppSetting("Password");

        public static MailAddress From => new MailAddress(GetAppSetting("From"));
    }
创建邮件配置类:

<html>
<body style="margin: 0; padding: 0;">
    <div style="width:100%; display:block; float:left; height:100%;">
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr>
                <td width="37" style="background-color: #ffffff;"></td>
                <td width="200" style="background-color: #ffffff">
                    <a href="@Url("")">Send Mail Logo</a>                    
                </td>
                <td style="background-color: #ffffff;">
                    &nbsp;

                </td>
                <td width="126" style="background-color: #ffffff;">
                    <img src="@Url("Images/mail/social-media.png")" alt="" width="126" height="73" border="0" usemap="#Map" />
                </td>
            </tr>
        </table>
        <table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
            <tr height="7">
                <td style="background-color: #ffffff;" colspan="3"></td>
            </tr>
            <tr height="54">
                <td colspan="3"></td>
            </tr>
            <tr>
                <td width="37">&nbsp;</td>
                <td style="font-family: Myriad, 'Helvetica Neue',Arial,Helvetica,sans-serif; font-size: 11pt; color: #6b6c6f; line-height: 24px;">
                    {{BODY}}
                </td>
                <td width="37">&nbsp;</td>
            </tr>

            <tr height="55">
                <td style="line-height: 0;" colspan="3">&nbsp;</td>
            </tr>
            <tr height="11">
                <td background="@Url("/Images/mail/dotted-line.png")" colspan="3" style="line-height: 0;">&nbsp;</td>
            </tr>
        </table>
    </div>
    <map name="Map" id="Map">
        <area shape="rect" coords="28,29,51,51" href="#" alt="Twitter" />
        <area shape="rect" coords="56,28,78,52" href="#" alt="Google+" />
        <area shape="rect" coords="84,28,104,51" href="#" alt="LinkedIn" />
    </map>
</body>
</html>
@using yourProjectnamespace.LanguageResources.Mail
@model ConfirmEmail

@MailTemplateResource.YouHaveLoggedIn

<a href="@Url(string.Format("/User/Confirmemail?EmailId={0}", Model.UserId))">@MailTemplateResource.ClickHere</a> 
public class CustomTemplateBase<T> : TemplateBase<T>
    {
        public string Url(string url)
        {
            return MailConfiguration.BaseUrl + url.TrimStart('/');
        }          
    }
public class Mail
    {
        private static readonly IRazorEngineService RazorEngine;

        static Mail()
        {
            var config = new TemplateServiceConfiguration
            {
                BaseTemplateType = typeof(CustomTemplateBase<>),
                TemplateManager = new EmbeddedTemplateManager(typeof(Mail).Namespace + ".Templates"),
                Namespaces = { "Add CurrentProjectName", "Add CurrentProjectName .Models" },
                CachingProvider = new DefaultCachingProvider()
            };
            RazorEngine = RazorEngineService.Create(config);
        }

        public Mail(string templateName)
        {
            TemplateName = templateName;
            ViewBag = new DynamicViewBag();
        }

        public string TemplateName { get; set; }

        public object Model { get; set; }

        public DynamicViewBag ViewBag { get; set; }

        public string GenerateBody()
        {
            var layout = RazorEngine.RunCompile("_Layout", model: null);
            var body = RazorEngine.RunCompile(TemplateName, Model.GetType(), Model);
            return layout.Replace("{{BODY}}", body);
        }

        public MailMessage Send(Guid key, string to, string subject, string cc = null)
        {
            var email = new MailMessage()
            {
                From = MailConfiguration.From,
                Body = GenerateBody(),
                IsBodyHtml = true,
                Subject = subject,
                BodyEncoding = Encoding.UTF8
            };

            email.Headers.Add("X-MC-Metadata", "{ \"key\": \"" + key.ToString("N") + "\" }");         

            foreach (var sendTo in to.Split(' ', ',', ';'))
            {
                email.To.Add(sendTo);
            }

            if (cc != null)
            {
                foreach (var sendCC in cc.Split(' ', ',', ';'))
                {
                    email.CC.Add(sendCC);
                }
            }

            var smtp = new MailClient().SmtpClient;
            smtp.EnableSsl = true;
            smtp.Send(email);
            return email;
        }
    }

    public class Mail<TModel> : Mail where TModel : class
    {
        public Mail(string templateName, TModel mailModel) : base(templateName)
        {
            Model = mailModel;
        }
    }
public class MailConfiguration
    {
        private static string GetAppSetting(string key)
        {
            var element = ConfigurationManager.AppSettings["Mail:" + key];
            return element ?? string.Empty;
        }

        public static string BaseUrl => GetAppSetting("BaseUrl");     

        public static string Host => GetAppSetting("Host");

        public static int Port => Int32.Parse(GetAppSetting("Port"));

        public static string UserName => GetAppSetting("Username");

        public static string Password => GetAppSetting("Password");

        public static MailAddress From => new MailAddress(GetAppSetting("From"));
    }
邮件发件人类别:

public class MailClient
    {
        public MailClient()
        {
            SmtpClient = new SmtpClient(MailConfiguration.Host)
            {
                Port = MailConfiguration.Port,
                Credentials = new NetworkCredential
                {
                    UserName = MailConfiguration.UserName,
                    Password = MailConfiguration.Password
                }
            };
        }

        public SmtpClient SmtpClient { get; }
    }
在MailSerder类中实现您的方法,并在存储库或控制器中调用MailSerder方法

Create public class MailSender : IMailSender
    {
        public MailSender()
        {

        }

        public void SendConfirmEmail(string emailId, Guid userId)
        {
            var confirmEmail = new ConfirmEmail
            {
                UserId = userId
            };
            ConfirmEmail(emailId, MailResource.YourRegistration, confirmEmail);
        }

        private void ConfirmEmail(string recipient,string subject,ConfirmEmail model)
        {
            var key = Guid.NewGuid();
            var mail = new Mail<ConfirmEmail>("ConfirmEmail", model);
            mail.ViewBag.AddValue("Recipient", recipient);           
            var sentMail = mail.Send(key, recipient, subject);          
        }
    }
创建公共类mailssender:IMailSender
{
公共邮件发送者()
{
}
public void SendConfirmEmail(字符串emailId,Guid userId)
{
var confirmEmail=新的confirmEmail
{
UserId=UserId
};
确认邮件(emailId,MailResource.YourRegistration,确认邮件);
}
私有无效确认邮件(字符串收件人、字符串主题、确认邮件模型)
{
var key=Guid.NewGuid();
var mail=新邮件(“确认邮件”,型号);
mail.ViewBag.AddValue(“收件人”,收件人);
var sentMail=mail.Send(键、收件人、主题);
}
}

我试图在上面的MS博客中实现该解决方案,但我一直收到stackoverflow异常。我已经花了一整天的时间在这上面了。我可以给你寄一份快速的申请表。我把它拼凑起来,你就知道了。它已经拼凑好了,但你肯定会明白的。应用程序库是RazorEngineConsoleApplication\bin\Debug,因此我将模板复制到其中。为了坚持我发布的示例,使用@Include(“Footer.cshtml”,Model)代替@RendarPart,它将使用模板解析器。RendarPart扩展不需要
ITemplateResolver
是票据。没有别的办法。最后编写了一个自定义路径处理程序,以消除搜索视图时的任何怪癖。