Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当创建像BeginForm这样的HTML扩展时,我可以将内容作为字符串抓取吗?_C#_Asp.net Mvc - Fatal编程技术网

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

C# 当创建像BeginForm这样的HTML扩展时,我可以将内容作为字符串抓取吗?,c#,asp.net-mvc,C#,Asp.net Mvc,我正试图找到一种方法,在“using”块(类似于Html.BeginForm)中捕获提供给Html扩展的内部内容。我已经读过关于使用IDisposable类渲染结束块的内容-这是我到目前为止的内容: public static class HtmlExtensions { private class RZScript : IDisposable { private HtmlHelper _helper; private string _output

我正试图找到一种方法,在“using”块(类似于Html.BeginForm)中捕获提供给Html扩展的内部内容。我已经读过关于使用IDisposable类渲染结束块的内容-这是我到目前为止的内容:

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)
}
测试

@使用(Html.TestThis()) { @:(BBBB) }
我希望得到的结果是:

测试(AAAA)(BBBB)(CCCC)

我实际上得到的是:

测试(BBBB)(AAAA)测试(CCCC)


知道如何(或者如果!)将内容转换成字符串吗?谢谢。

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

public static IHtmlString RegisterScriptInline(this HtmlHelper htmlHelper,
    Func<object, IHtmlString> content)
{
    string renderedContent = content.Invoke(null).ToString(); // Got it!!!
    return null;
}
公共静态IHtmlString寄存器scriptinline(此HtmlHelper HtmlHelper,
Func(内容)
{
string renderedContent=content.Invoke(null).ToString();//找到了!!!
返回null;
}
然后用类似的方式调用(扩展示例以显示Razor do evaluate中的服务器端条件):

@Html.RegisterScriptInline(@
@如果(某些条件)
{
@:var项='Value1';
}
其他的
{
@:var项='Value2';
}
)
这里没有开始/结束的内容-但是,我问题中的所有AAAAs和CCCC等都是作为分隔符存在的,只是为了表明我试图提取BBBBs(!)我暂时不会将其标记为答案,因为它给出了我想要的结果,但它没有具体回答问题

(如果你想知道的话,可以复制@section的功能)

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