我正在建立一个网站,允许人们向选择不同模板的人发送电子邮件。当他们设置了电子邮件并选择了模板后,用户就可以预览它了。目前,这会将相应的aspx页面加载到所选的模板。
我目前有3个模板,但预计会大幅增长。
aspx页面都具有相同的控件,具有相同的名称,甚至代码隐藏(cs)页面也是相同的。因此,如果我能够以某种方式将这些页面组合在一起并最小化重复,甚至只使用一个页面,而是加载与所选模板相对应的HTML,那将会更加简单和有效。
我无法想出一个合适的方法来做到这一点,或者甚至可以解决这个问题。我可能已经到了无法直接思考这个问题的地步,因为它让我头疼。
所以.....
请请给我一些解决方案,甚至只是建议。 ; - )
感谢。
附加信息
作为一个额外的问题,我必须在创建电子邮件时以编程方式重新创建模板,并将其作为HTML电子邮件发送给收件人。这是通过不同的页面完成的,因此会产生更多重复,以便最小化。
答案 0 :(得分:1)
创建一个Page类,比方说,TemplateViewerPage
TemplateViewerPage.cs
using System;
using System.Web.UI;
public partial class TemplateViewerPage : Page
{
protected override void OnLoad(EventArgs e)
{
// load your properties
_subject = "test";
_messageBody = "body";
base.OnLoad(e);
}
// your property
private string _subject;
public string Subject
{
get { return _subject; }
set { _subject = value; }
}
private string _messageBody;
public string MessageBody
{
get { return _messageBody; }
set { _messageBody = value; }
}
}
然后您可以为模板A创建查看器:
ViewerA.aspx
<%@ Page Language="C#" AutoEventWireup="false" Inherits="TemplateViewerPage" CodeFile="TemplateViewerPage.cs" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>Subject</td>
<td> <%= Subject %> </td>
</tr>
<tr>
<td>Message</td>
<td> <%= MessageBody %> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
和ViewerB,后面有相同的代码(codefile = TemplateViewerPage.cs)
ViewerB.aspx:
<%@ Page Language="C#" AutoEventWireup="false" Inherits="TemplateViewerPage" CodeFile="TemplateViewerPage.cs" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div class="subject">
<%= Subject %>
</div>
<div class="message">
<%= MessageBody %> </td>
</div>
</div>
</form>
</body>
</html>
答案 1 :(得分:0)
模板的MasterPages怎么样?在PageLoad中选择适当的母版页。
如果是内容然后使用CSS进行格式化(显然可以更改在Pageload上加载的CSS),占位符和从数据存储中为邮件填充它们是另一种选择。
它认为解决方案可能与StackOverflow上的用户一样多;)
答案 2 :(得分:0)
如果后面的所有控件和代码都相同,那么您是否无法将所有控件放入母版页中,只是将内容页面用于实际的电子邮件?
啊,我明白了。虽然它的变化总是在类似的结构中?因为您可以在母版页中拥有多个内容持有者。因此,在母版页中,您可以将控件内容包含在控件中,如下所示:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
<asp:Button ID="button1" runat="server" />
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
</asp:ContentPlaceHolder>
答案 3 :(得分:0)
我还没有发现asp.net web表单页面,母版页或mvc非常适合这类事情。这就像用大锤打开花生一样。
创建一些自定义xml标签然后自己合并它们非常简单。将模板保存在数据库中并随时进行合并,而无需运行asp.net的所有开销。使用敏捷原则:首先创建测试并向后工作,您可以立即获得所需的运行。
最基本的是直线替换。如果你需要更多,听起来不像你那样,你可以使用xslt或只是走DOM(即将模板存储为xhtml并拥有自己的自定义标签支持)。
还存在部署问题。更新数据库中的模板要比将文件上载到服务器容易得多。如果您确实沿着使用Web表单的路线前进,请确保在您之前了解部署方案。
警告:HTML电子邮件很棘手,并且有很多丑陋(从html的角度来看)让它们在电子邮件客户端中统一呈现。期待像1999年一样对html进行编码,这几乎就是html电子邮件的状态。悲伤却又是真的。