Как сгенерировать строку из View (.aspx или .ascx) - PullRequest
0 голосов
/ 25 марта 2011

Как я могу получить разрешенное (<%%> разрешенное) представление (aspx или ascx) в строковом формате? Я хочу иметь файл .ascx с некоторыми <%= ... %> кодовыми блоками и хочу иметь возможность отправлять его как часть электронной почты в формате HTML. Как я могу сделать это с MVC?

Ответы [ 3 ]

2 голосов
/ 25 марта 2011

Не делайте это нелегко, оформить заказ MvcMailer или Почтовый . Это сделает вашу жизнь намного проще. И не только это, но у вас будет больше времени, чтобы сосредоточиться на решении реальных проблем бизнеса, а не на таких сантехнических работах, как этот, которые уже были решены.

1 голос
/ 25 марта 2011

Не уверен, работает ли это с частичными представлениями, но я использую этот код для отображения представления в виде строки.

public string RenderViewAsString(ControllerContext context, string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = context.RouteData.GetRequiredString("action");

    var view = ViewEngines.Engines.FindView(context, viewName, null).View;
    if (view != null)
    {
        var sb = new StringBuilder();
        using (var writer = new StringWriter(sb))
        {
            var viewContext = new ViewContext(context, view,
                    new ViewDataDictionary(model), new TempDataDictionary(), writer);
            view.Render(viewContext, writer);
            writer.Flush();
        }
        return sb.ToString();
    }
    return string.Empty;
}
0 голосов
/ 25 марта 2011

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

[ОБНОВЛЕНО] Фильтр настраиваемых действий может иметь вид:

public class SendEmailAttribute : ActionFilterAttribute
 {

    public SendEmailAttribute()
    {
        //Initialize logic --Dependency injection
    }
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        SendMail(context); //Implement email sending logic using MailMessage
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...