我正在使用RazorEngine(razorengine.codeplex.com)。
如何从我的cshtml模板中调用'Action'?我引用'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;
}
}
这可能吗?如果是这样,我需要做什么?
答案 0 :(得分:2)
您可以通过以下方式实现这一目标:
@Html.Method1("yourtemplatename")
@Html.Method2("yourtemplatename")
但是,您必须使用Method1
和Method2
扩展方法:
public static string Method1(this HtmlHelper htmlHelper, string templateName)
public static string Method2(this HtmlHelper htmlHelper, string templateName)
OP编辑
是的,这是正确的想法。当你回答它的时候,我更多地探索了一下,我找到了related problem which answers this question completely,所以我决定在这里包括完整的答案(作为你的答案的一部分,所以我可以将它标记为正确!),以备将来参考
完整的答案是:
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()
}