我在我的MVC应用程序中使用RazorEngine在HtmlHelper扩展中,如下所示:
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模板中充分使用RazorEngine。还是RazorEngine不是一个很好的途径呢?我有点像RazorEngine的菜鸟,所以要忍受我。
发布于 2021-04-26 09:04:30
不使用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"))https://stackoverflow.com/questions/44856301
复制相似问题