![](/img/trans.png)
[英]Getting Error: "error CS0117: 'System.Web.UI.Control' does not contain a definition for 'ItemIndex'
[英]Why does the MailDefinition class require a System.Web.UI.Control?
通过在MailDefinition类上调用“CreateMailMessage”方法创建MailMessage对象时,第三个参数是System.Web.UI.Control类型的对象。
MailDefinition mail = new MailDefinition();
ListDictionary replacements = new ListDictionary();
replacements.Add("<%myname%>", "John");
mail.BodyFileName = "~/App_Data/Emails/SomeEmail.txt";
mail.From = "me@example.com";
mail.Subject = "Hello";
MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, );
这是为什么?
如果我没有这种类型的对象,我应该通过什么呢? 只是一个新的Control对象?
Control control = new Control();
UPDATE
我强烈建议使用Razor构建电子邮件模板。 它具有很好的语法,效果很好,并且没有任何奇怪的依赖!
通常你只是将this
作为控件传递。
MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);
至于原因, 这就是MSDN所说的:
owner参数指示哪个控件是MailDefinition控件的父控件。 它确定搜索BodyFileName属性中指定的文本文件的目录。
CreateMailMessage函数在内部使用指定的Control来查询其AppRelativeTemplateSourceDirectory属性及其OpenFile方法以读取正文的内容(在MailDefinition的BodyFileName属性中指定 )。
对我来说似乎设计不佳和不必要的紧耦合。
你也可以这样做:
MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
我一直在使用new LiteralControl()
作为第三个参数,因为我的消息是从工作流发送的。 有用。 但我对“为什么”没有答案。
如果你没有绑定到任何控件,听起来你可能根本不需要使用MailDefinition类。 要通过smtp发送电子邮件,您应该将System.Net.Mail.SmtpClient与System.Net.Mail.MailMessage一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.