怎样在c#程序中引用system.web.UI为啥我找不到这个引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在c#程序中引用system.web.UI为啥我找不到这个引用相关的知识,希望对你有一定的参考价值。
参考技术A 要添加引用:System.Web 在项目或者 References文件夹上右键 “添加引用” ,选择 选项卡“.net” 下面的 System.Web ,确定就可以了本回答被提问者和网友采纳为啥 MailDefinition 类需要 System.Web.UI.Control?
【中文标题】为啥 MailDefinition 类需要 System.Web.UI.Control?【英文标题】:Why does the MailDefinition class require a System.Web.UI.Control?为什么 MailDefinition 类需要 System.Web.UI.Control? 【发布时间】:2010-10-19 03:36:45 【问题描述】:通过调用 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();
更新
我强烈建议使用Razor 来构建电子邮件模板。它有很好的语法,很好用,而且没有任何奇怪的依赖!
【问题讨论】:
你为什么不使用 MailMessage message = new MailMessage()? 【参考方案1】:通常您只需将this
作为控件传递。
MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);
至于原因,here is what MSDN says:
owner 参数指示哪个控件是 MailDefinition 控件的父级。它确定在哪个目录中搜索 BodyFileName 属性中指定的文本文件。
【讨论】:
如果我不是从 ASPX 页面运行,而是从 APP_CODE 类运行呢? 那么您需要将当前控件的引用传入创建邮件消息的代码中。【参考方案2】:如果您没有绑定到任何控件,听起来您可能根本不需要使用 MailDefinition 类。要简单地通过 smtp 发送电子邮件,您应该使用 System.Net.Mail.SmtpClient 和 System.Net.Mail.MailMessage。
【讨论】:
基本上,我使用 MailDefinition 类来替代它。 Razor engine IMO 是新的最佳实践方式。【参考方案3】:我一直使用new LiteralControl()
作为第三个参数,因为我的消息是从工作流发送的。有用。但我没有“为什么”的答案。
【讨论】:
【参考方案4】:CreateMailMessage 函数内部使用指定的Control 来查询其AppRelativeTemplateSourceDirectory 属性及其OpenFile 方法来读取正文的内容(在 MailDefinition 的 BodyFileName 属性中指定)。
对我来说,这似乎是糟糕的设计和不必要的紧密耦合。
【讨论】:
确实!但是随着 Razor 模板引擎的出现,它不再重要了 :P razorengine.codeplex.com 以防你一直生活在一块石头下:) @JohnBubriski 我可以在 ASP.NET WebForms 应用程序中使用 RazorEngine 吗? 【参考方案5】:你也可以这样做:
MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
【讨论】:
以上是关于怎样在c#程序中引用system.web.UI为啥我找不到这个引用的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MailDefinition 类需要 System.Web.UI.Control?
C#(095):微软Charting图表控件 System.Web.UI.DataVisuliztion.Charting