Bor*_* B. 23 c# asp.net .net-4.0 razor asp.net-mvc-3
我有一个帮助器EditableArea,它为用户提供了一个运行时可编辑的div(通过JS).EditableArea帮助程序检查Area数据库中是否存在具有指定ID 的可编辑区域(与MVC无关),如果是,则呈现该区域的HTML,否则它将显示为辅助程序指定的默认标记:
@Html.EditableArea(someId, "<p>Click to edit contents</p>")
Run Code Online (Sandbox Code Playgroud)
这一切都运行正常,但我想更改它,以便默认标记不是作为字符串指定,而是在剃刀语法中,如下所示:
@using (Html.EditableArea(someId))
{
<p>Click to edit contents</p>
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西,比如@section在MVC3中的工作方式.
我怎样才能做到这一点?
我可以在IDisposable其中Dispose关闭TagBuilder等,但我无法避免渲染内部Razor标记,即使帮助器找到一个带ID的区域(我可以清除Dispose()中的渲染内容但是{仍然会运行,我想跳过).
如果我不使用Dispose()是否有其他方法将剃刀块传递给帮助器,帮助器实际上可能会或可能不会实现?
Mar*_*arz 29
这是我用来通过传递模板ID和模板本身的razor样式语法来呈现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>");
}
Run Code Online (Sandbox Code Playgroud)
这将被称为
@Html.jQueryTmpl("templateId", @<text>any type of valid razor syntax here</text>)
Run Code Online (Sandbox Code Playgroud)
基本上只是Func<object, HelperResult>用作参数和template.Invoke(null)(如有必要,带参数)来渲染它.显然,您可以跳过调用以.Invoke()避免呈现"默认"标记.
| 归档时间: |
|
| 查看次数: |
5780 次 |
| 最近记录: |