C# 当创建像BeginForm这样的HTML扩展时,我可以将内容作为字符串抓取吗?
我正试图找到一种方法,在“using”块(类似于Html.BeginForm)中捕获提供给Html扩展的内部内容。我已经读过关于使用IDisposable类渲染结束块的内容-这是我到目前为止的内容: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
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>)