首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtmlHelper在RazorEngine模板中

HtmlHelper在RazorEngine模板中
EN

Stack Overflow用户
提问于 2017-07-01 00:20:26
回答 1查看 1.1K关注 0票数 2

我在我的MVC应用程序中使用RazorEngineHtmlHelper扩展中,如下所示:

MyHtmlHelpers.cs:

代码语言:javascript
复制
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中使用的代码如下:

代码语言:javascript
复制
@Html.MyTextBox("Enter Some Text", "")

一切都很好。但是,当我试图在另一个助手中嵌套一个助手时,它就会崩溃,如下所示:

代码语言:javascript
复制
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‘在当前上下文中不存在

当我试着去做

代码语言:javascript
复制
@Html.MyName("Peter", "Griffin")

我认为这是因为RazorEngine不像MVC那样支持@Html。(上面的错误并不是特定于我自己的HtmlHelper,也不是它调用RazorEngine的事实,而是发生在@Html的任何用法上。)

有办法绕过这件事吗?我希望能够在任意多层深度嵌套这样的助手,因此需要能够在RazorEngine模板中充分使用RazorEngine。还是RazorEngine不是一个很好的途径呢?我有点像RazorEngine的菜鸟,所以要忍受我。

EN

回答 1

Stack Overflow用户

发布于 2021-04-26 09:04:30

不使用HtmlHelper,但取得了类似的结果:

代码语言:javascript
复制
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;
    }
}

变更摘要:

  • 将返回类型更改为字符串
  • 删除扩展参数
  • 将@Html引用替换为下面的
  • 进入自己的助手类

像这样使用:

代码语言:javascript
复制
@Raw(MyHelper.MyName("Peter", "Griffin"))

参考文献:https://antaris.github.io/RazorEngine/Encoding.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44856301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档