如何在.net mvc5中的控制器外返回一个html字符串

时间:2014-08-28 06:44:50

标签: c# asp.net-mvc razor

我使用.net MVC 5构建Web应用程序并尝试实现类似于Controller类的View()方法的方法,但只返回已评估的html字符串。

我有我的班级Person.cs:

public class Person
{
    public string name {get; set;}
    public string address {get; set;}
}

我的视图模板PersonSummary.cshtml:

@model Project.Models.Person
<html>
    <h1>Name: @Model.Name</h1>
    <p>Address: @Model.Address</p>
</html>

我想做的是:

Person person = new Person(){ name = "foo", address = "bar" };
string myHTML = myNewFunction("PersonSummary", person);

我确实有一个当前的解决方案(hack)创建一个单独的控制器并从ActionResult获取字符串但是在更优雅的东西之后。

1 个答案:

答案 0 :(得分:1)

也许值得尝试使用RazorEngine?它非常适合用于简单的视图(作为您的)。它非常适合f.e.用于生成HTML电子邮件。

示例方法:

public string Compile<T>(string viewContent, T model)
{
    return Razor.Parse(viewContent, model);
}

public string CompileFromPath<T>(string viewPath, T model)
{
    if (!File.FileExists(viewPath))
    {
        return null;
    }

    var viewContent = File.ReadAllText(viewPath, System.Text.Encoding.UTF8);

    return this.Compile(viewContent, model);
}

用法:

var html = CompileFrompath(Server.MapPath("~/my/view/path.cshtml"), person);

说明:

  1. 我不确定图书馆如何处理HtmlUrl的iddational助手。我相信它可以配置为处理所有需要的扩展。