怎样在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 方法来读取正文的内容(在 MailDefinitionBodyFileName 属性中指定)。

对我来说,这似乎是糟糕的设计和不必要的紧密耦合。

【讨论】:

确实!但是随着 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为啥我找不到这个引用的主要内容,如果未能解决你的问题,请参考以下文章

如何配置使用 System.Web.UI

为啥 MailDefinition 类需要 System.Web.UI.Control?

C#编程怎么实现每隔一定时间自动操作一次

c#Ajax 的错误,应该如何解决?

C#(095):微软Charting图表控件 System.Web.UI.DataVisuliztion.Charting

出现错误Microsoft.Web.UI.WebControls