0

我正在使用 RazorEngine ( razorengine.codeplex.com )。

我怎样才能让它从我的 cshtml 模板中调用“操作”?我引用“Action”是因为它实际上并不是 MVC 意义上的 Action,因为 RazorEngine 与 MVC 分离,我正在从 WPF 解决方案中运行它。基本上我需要的是以下内容:(请注意以下是严格的伪代码,旨在说明一个想法)

<!DOCTYPE html>
<html>
    <head></head>
    <body>

        <!-- something similar to the following so that I can 
             include partial views where needed. -->
        @Html.Action("Method1")

        @Html.Action("Method2")

<!-- or -->

        @Html.Action("RazorTemplate1.cshtml")

        @Html.Action("RazorTemplate2.cshtml")

<!-- or -->

        @MyTemplateFunctionality.Method1()

        @MyTemplateFunctionality.Method2()
    </body>
</html>

定义方法的地方,例如

public static class MyTemplateFunctionality
{
    public static string Method1(string templateName)
    {
        // execute functionality to render HTML output for Method1
        string htmlOutput = RazorEngine.Razor.Parse(templateName, new { ObjModelForMethod1 }); ;

        return htmlOutput;
    }

    public static string Method2(string templateName)
    {
        // execute functionality to render HTML output for Method2
        string htmlOutput = RazorEngine.Razor.Parse(templateName, new { ObjModelForMethod2 }); ;

        return htmlOutput;
    }
}

这可能吗?如果是这样,我需要做什么?

4

1 回答 1

2

您可以通过以下方式实现:

@Html.Method1("yourtemplatename")

@Html.Method2("yourtemplatename")

但是,你必须使你的Method1Method2扩展方法:

public static string Method1(this HtmlHelper htmlHelper, string templateName)

public static string Method2(this HtmlHelper htmlHelper, string templateName)

OP 编辑

是的,这是正确的想法。当您回答它时,我又四处寻找,我发现了一个完全回答这个问题的相关问题,所以我决定在此处包含完整的答案(作为您答案的一部分,以便我可以将其标记为正确!),因为以后的参考。

完整的答案是:

namespace MyCompany.Extensions
{
    public static class MyClassExtensions
    {
        public static string ExtensionMethod1(this MyClass myClass)
        {
            myClass.DoStuff();
            return "whatever I want my string to be";
        }

        public static string ExtensionMethod2(this MyClass myClass)
        {
            myClass.DoOtherStuff();
            return "the output of ExtensionMethod2";
        }
    }

    public class MyClass
    {
        public void DoStuff()
        {
            // do whatever
        }

        public void DoOtherStuff()
        {
            // do whatever else
        }
    }
}

然后在cshtml中,简单地添加:

@using MyCompany.Extensions
@using MyCompany

@{
    var myInstance = new MyClass();
    @myInstance.ExtensionMethod1()

    @myInstance.ExtensionMethod1()
}
于 2013-07-24T10:40:30.777 回答