我正在尝试找到一种方法来捕获提供给“使用” 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/