gpt4 book ai didi

c# - ASP.Net MVC3 - 将 Razor 标记作为参数传递

转载 作者:IT王子 更新时间:2023-10-29 04:30:43 24 4
gpt4 key购买 nike

我有一个名为 EditableArea 的助手,它为用户提供了一个运行时可编辑的 div(通过 JS)。 EditableArea 助手检查数据库中是否存在具有指定 ID 的可编辑区域(与 MVC 的 Area 无关),如果存在,则呈现该区域的 HTML,否则显示指定为参数的默认标记 helper :

@Html.EditableArea(someId, "<p>Click to edit contents</p>")

一切正常,但我想更改它,以便默认标记不指定为字符串,而是以 Razor 语法指定,例如:

@using (Html.EditableArea(someId))
{
<p>Click to edit contents</p>
}

或者类似的东西,比如 @section 在 MVC3 中的工作方式。

我怎样才能做到这一点?

我可以制作一个 IDisposable,在其 Dispose 中关闭 TagBuilder 等,但使用这种方法,标记仍将被呈现(我可以清除呈现的内容在 Dispose() 中,但代码块仍会不必要地运行,我想避免这种情况)。

有没有其他方法可以将 Razor block 传递给助手,它可能会或可能不会实际呈现?

最佳答案

这是一个示例,我通过传入模板 Id 和模板本身的 razor-style 语法来呈现 jQuery 模板标记:

public static MvcHtmlString jQueryTmpl(this HtmlHelper htmlHelper, 
string templateId, Func<object, HelperResult> template)
{
return MvcHtmlString.Create("<script id=\"" + templateId +
"\" type=\"x-jquery-tmpl\">" + template.Invoke(null) + "</script>");
}

这将被称为

@Html.jQueryTmpl("templateId", @<text>any type of valid razor syntax here</text>)

基本上就用Func<object, HelperResult>作为你的参数和 template.Invoke(null) (必要时带参数)渲染它。显然你可以跳过对 .Invoke() 的调用以避免呈现“默认”标记。

关于c# - ASP.Net MVC3 - 将 Razor 标记作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com