2009-08-14 7 views
0

Я создаю веб-сайт, который позволяет людям отправлять электронные письма людям с выбором разных шаблонов. Когда они настроят свой адрес электронной почты и выбрали шаблон, пользователь может его просмотреть. В настоящее время это загружает соответствующую страницу aspx в выбранный шаблон.Различные HTML, те же коды и те же элементы управления

В настоящее время у меня есть 3 шаблона, но ожидайте, что это значительно вырастет.

Все страницы aspx имеют одинаковые элементы управления с одинаковыми именами и даже с кодовым кодом (cs). Поэтому было бы намного проще и эффективнее, если бы я мог связать эти страницы вместе и свести к минимуму повторение, возможно, даже просто используя одну страницу, но загружая HTML, соответствующий выбранному шаблону.

Я не могу придумать подходящий способ сделать это или даже разработать, если это возможно. Вероятно, я дошел до такой степени, что не могу сразу подумать над этим вопросом, так как он причиняет мне такую ​​головную боль.

Так .....

Пожалуйста, пожалуйста, пожалуйста, дайте мне какие-то решения или даже просто предложения. ;-)

Спасибо.


ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

В качестве дополнительной задачи, я должен воссоздать шаблоны программно, когда электронные письма создаются и отправляются получателям как HTML писем. Это делается с помощью другой страницы и, следовательно, приводит к большему дублированию, которое, как правило, минимизирует.

ответ

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> 
+0

Но я хотел бы рекомендовать вам использовать asp.net mvc framework. –

+0

Вам не нужно создавать класс просмотра для каждого шаблона. Я только что отредактировал свой ответ. –

+0

В чем разница между: <% = Subject%> и <% # Subject%>? – Munklefish

0

Как насчет MasterPages для шаблонов? Выберите соответствующую главную страницу в PageLoad.

Если это содержимое, то с помощью CSS для форматирования (очевидно, вы можете изменить CSS, загружаемый в Pageload), а также заполнители и заполнение их из хранилища данных для почты - это еще один вариант.

Это думаю, что, вероятно, так много решений, как есть пользователи StackOverflow;)

+0

CSS + Placeholders, а не только CSS :) – Lazarus

+0

Не использует CSS, так как нам нужны электронные письма HTML, чтобы они выглядели достаточно последовательно в браузерах. По общему мнению, это не реалистично с использованием CSS и поэтому для позиционирования используются таблицы. – Munklefish

0

Если все элементы управления и код за одни и те же, не могли вы поставите все элементы управления на главной странице и просто используйте страницы содержимого для фактических писем?

А я вижу. Хотя он меняется, он всегда в аналогичной структуре? Потому что у вас может быть несколько владельцев контента на главной странице.Таким образом, в MasterPage вы могли бы иметь содержание, обернутый вокруг управления следующим образом:

 <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
    </asp:ContentPlaceHolder> 
    <asp:Button ID="button1" runat="server" /> 
    <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server"> 
    </asp:ContentPlaceHolder> 
+0

Элементы управления расположены с использованием html, а не css. Как бы я обернул html вокруг элементов управления? Поскольку html - это единственное, что меняется. – Munklefish

+0

Отредактированный ответ выше. – Fishcake

+0

Возможно, у меня есть ментальный блок и не видно, что вы пытаетесь объяснить. С моей точки зрения, этот метод не помогает, поскольку элементы управления размещаются в разных позициях и заказы с каждым другим шаблоном. – Munklefish

0

Я не нашел, что страница asp.net веб-формы, мастер-страницы, или MVC очень хорошо подходит для такого рода вещи. Это похоже на использование кувалды, чтобы открыть арахис.

Очень просто создать некоторые пользовательские теги xml, а затем объединить их самостоятельно. Сохраните шаблон в базе данных и слейте его, когда захотите, и без накладных расходов на работу asp.net. Используйте гибкие принципы: сначала создайте свои тесты и работайте в обратном направлении, и у вас будет именно то, что вам нужно запустить в кратчайшие сроки.

Самым простым является замена прямой струны. Если вам нужно больше, что не похоже на вас, вы можете использовать xslt или просто пройти DOM (т. Е. Хранить ваши шаблоны как xhtml и иметь собственную поддержку тегов).

Существует также проблема развертывания. Гораздо проще обновлять шаблоны в базе данных, чем загружать файлы на сервер. Если вы идете по пути использования веб-форм, убедитесь, что вы понимаете сценарий развертывания до вас.

Предупреждение: html-письма сложны, и есть много уродства (с точки зрения html), чтобы заставить их равномерно отображаться в почтовых клиентах. Ожидайте код html, как и в 1999 году, и это в значительной степени состояние html-писем. Печально, но верно.

Смежные вопросы