ASP.NET MVC将模型传递给没有controllerContext的html模板

时间:2011-02-08 15:33:42

标签: asp.net-mvc asp.net-mvc-3

我想要一个我用于电子邮件的html模板。我想将模型传递给它,让它渲染并返回到字符串变量。

我怎样才能做到这一点?我确信我可以使用asp.net mvc附带的渲染。

我不想在我的控制器内或使用controllercontext对象执行此操作。

4 个答案:

答案 0 :(得分:1)

使用@Mitch Rosenburg的评论作为答案:

我正在使用DotLiquid模板。

答案 1 :(得分:0)

我自己没有尝试过,但是我找到了一个名为Postal的库,我打算在我自己的应用程序中使用它来创建一个非常相似的功能。

答案 2 :(得分:0)

您可以使用以下方法执行此操作:

private string ViewToString(string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = ControllerContext.RouteData.GetRequiredString("action");

    ViewData.Model = model;

    using (StringWriter sw = new StringWriter()) 
    {
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}

在你的行动方法中你可以像这样使用它

ViewToString("Index", model);

其中model是您要发送到“模板”的模型

答案 3 :(得分:0)

我必须做同样的事情,然后我最终使用HttpWebRequest来“渲染”视图并将结果捕获为字符串。

这个解决方案带来了许多其他问题(获取授权cookie,通过我们的自定义URL安全层等),它感觉效率低下而且草率,但截止日期是截止日期,对吗?

代码看起来像这样:

public string GetEmailBody(string url)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    StreamReader streamReader = new StreamReader(responseStream);
    return streamReader.ReadToEnd();
}

希望它对某人有帮助。