我在HtmlHelper
扩展程序中的MVC应用中使用RazorEngine,因此:
MyHtmlHelpers.cs:
public static MvcHtmlString MyTextBox(this HtmlHelper helper, string label, string value)
{
var model = new { id = Guid.NewGuid().ToString(), label = label, value = value};
string view = @"
<label for=""@Model.id"">@Model.label</label>
<input id=""@Model.id"" name=""@Model.id"" type=""text"" value=""@Model.value"" placeholder=""@Model.label"" />
";
string renderedView = Engine.Razor.RunCompile(view, "MyTextBox", model: model);
return new MvcHtmlString(renderedView);
}
我在* .cshtml中使用如下:
@Html.MyTextBox("Enter Some Text", "")
一切都很好。但是,当我尝试将帮助器嵌套在另一个帮助器中时,它会崩溃,如下所示:
public static MvcHtmlString MyName(this HtmlHelper helper, string firstName, string lastName)
{
var model = new { firstName = firstName, lastName = lastName };
string view = @"
@Html.MyTextBox(""First Name"", @Model.firstName)
@Html.MyTextBox(""Last Name"", @Model.lastName)
";
string renderedView = Engine.Razor.RunCompile(view, "MyName", model: model);
return new MvcHtmlString(renderedView);
}
以上给了我
当前上下文中不存在名称“Html”
当我尝试
时@Html.MyName("Peter", "Griffin")
我认为是因为RazorEngine不像MVC那样支持@Html
。 (上述错误并非特定于我自己的HtmlHelper或它调用RazorEngine的事实,但适用于@Html
的任何用法。)
这有什么办法吗?我希望能够将这些帮助程序嵌套到任意数量的深层,因此需要能够在RazorEngine模板中使用@Html
到其完整功能。或者RazorEngine不是一个好的途径吗?我是一个RazorEngine菜鸟,所以忍受我。
答案 0 :(得分:0)
不使用 HtmlHelper,但实现了类似的结果:
public class MyHelper
{
public static string MyTextBox(string label, string value)
{
var model = new { id = Guid.NewGuid().ToString(), label = label, value = value};
string view = @"
<label for=""@Model.id"">@Model.label</label>
<input id=""@Model.id"" name=""@Model.id"" type=""text"" value=""@Model.value"" placeholder=""@Model.label"" />
";
string renderedView = Engine.Razor.RunCompile(view, "MyTextBox", model: model);
return renderedView;
}
public static string MyName(string firstName, string lastName)
{
var model = new { firstName = firstName, lastName = lastName };
string view = @"
@Raw(MyHelper.MyTextBox(""First Name"", @Model.firstName))
@Raw(MyHelper.MyTextBox(""Last Name"", @Model.lastName))
";
string renderedView = Engine.Razor.RunCompile(view, "MyName", model: model);
return renderedView;
}
}
变更摘要:
像这样使用:
@Raw(MyHelper.MyName("Peter", "Griffin"))