c# - 在创建像 BeginForm 这样的 HTML 扩展时,我可以将内容作为字符串抓取吗?

标签 c# asp.net-mvc

我正在尝试找到一种方法来捕获提供给“使用” block 中的 Html 扩展的内部内容(类似于 Html.BeginForm)。我读过有关使用 IDisposable 类来呈现结束 block 的信息 - 这是我目前所拥有的:

public static class HtmlExtensions
{
    private class RZScript : IDisposable
    {
        private HtmlHelper _helper;
        private string _outputContent;

        public RZScript(HtmlHelper helper)
        {
            _helper = helper;
            _outputContent = new HtmlTextWriter(_helper.ViewContext.Writer).InnerWriter.ToString();
        }

        public void Dispose()
        {
            _helper.ViewContext.Writer.Write("(AAAA)" + _outputContent + "(CCCC)");
        }
    }

    public static IDisposable TestThis(this HtmlHelper htmlHelper)
    {
        return new RZScript(htmlHelper);
    }
}

然后我用以下代码测试这个标签:

<p>test</p>
@using (Html.TestThis())
{
    @:(BBBB)
}

我希望得到的结果是:

test (AAAA)(BBBB)(CCCC)

我实际得到的是:

test (BBBB) (AAAA) test (CCCC)

知道如何(或者如果!)我可以将内容放入字符串中吗?谢谢。

最佳答案

有一些工作。不是我想要的语法,但结果是一样的。

public static IHtmlString RegisterScriptInline(this HtmlHelper htmlHelper,
    Func<object, IHtmlString> content)
{
    string renderedContent = content.Invoke(null).ToString(); // Got it!!!
    return null;
}

然后这将通过类似的方式调用(扩展示例以显示 Razor 中的服务器端条件进行评估):

@Html.RegisterScriptInline(@<text>
    <script type="text/javascript">
        @if (someCondition)
        {
            @:var item = 'Value1';
        }
        else
        {
            @:var item = 'Value2';
        }
    </script>
</text>)

这里没有开始/结束内容 - 但是,我问题中的所有 AAAA 和 CCCC 等都作为分隔符存在,只是为了表明我正在尝试提取 BBBB(!)我不会将其标记为答案时刻,因为它给了我想要的结果,但没有具体回答问题。

(如果您想知道,请重现@section 类功能...)

关于c# - 在创建像 BeginForm 这样的 HTML 扩展时,我可以将内容作为字符串抓取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55238027/

相关文章:

c# - Linq-to-entities,一次查询得到结果+行数

asp.net-mvc - 获取 MVC3 中选中复选框的 ID

asp.net-mvc - 用于新的 Asp.net CMS 站点的 Oxite 或 S#arp 架构

c# - Omu.ValueInjecter 在允许设置发生之前检查属性

c# - Ajax 传递空值但 Controller 在 ASP.NET MVC 中获取 null

asp.net - 断点aspx页面

c# - ExpressionVisitor 没有调用它的 VisitMethodCall

c# - 使用 FileSystemWatcher 触发事件,然后删除新创建的文件?

c# - 新语言功能破坏了脚手架——无法获取 DbContext 的反射类型

c# - 为什么 string[0] = "new value"不编译?