如何从View(.aspx或.ascx)生成字符串

时间:2011-03-25 19:57:33

标签: c# asp.net asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

如何以字符串格式获取已解析(&lt; %%&gt;已解析)的视图(aspx或ascx)?我希望.ascx文件包含一些<%= ... %>代码块,我希望能够以HTML格式将其作为电子邮件的一部分发送。我怎么能用MVC做到这一点?

3 个答案:

答案 0 :(得分:2)

不要这么做,结帐MvcMailerPostal。它会让你的生活更轻松。不仅如此,你将有更多的时间专注于解决一些真正的业务问题,而不是像以前那样已经解决的问题。

答案 1 :(得分:1)

不确定这是否适用于部分视图,但我使用这段代码来将视图呈现为字符串。

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;
}

答案 2 :(得分:0)

您可以使用MailMessage类来生成邮件。您可以在单独的自定义操作筛选器中推出电子邮件创建逻辑,以使控制器操作保持精简状态,并使电子邮件逻辑可重用。

[UPDATE] 自定义操作过滤器可以是:

public class SendEmailAttribute : ActionFilterAttribute
 {

    public SendEmailAttribute()
    {
        //Initialize logic --Dependency injection
    }
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        SendMail(context); //Implement email sending logic using MailMessage
    }
 }