【问题标题】:Razor - Render without Render() and without EncodingRazor - 在没有 Render() 和没有编码的情况下渲染
【发布时间】:2011-10-10 06:39:56
【问题描述】:

有人可以解释以下是如何实现的。 Telerik Grid 组件将使用以下代码生成非编码 HTML:

@(Html.Telerik().Grid(Model)
        .Name("Grid")
        .DataKeys(keys => keys.Add(c => c.ProductID))
        .DataBinding(dataBinding => dataBinding.Server()
            .Select("ColumnSettings", "Grid")
            .Update("ColumnSettings_Save", "Grid")
            .Delete("ColumnSettings_Delete", "Grid"))
        .Columns(columns =>columns.LoadSettings((IEnumerable<GridColumnSettings>)ViewData["Columns"]))
        .Sortable()
)

这可能是因为方法调用被包裹在“@(....)”中。每当我使用自己的组件尝试此操作时,结果都会被编码为 Html。我知道我可以使用 Render() 来输出 MvcHtmlString,然后我的 Html 没有被编码,但 Telerik 网格似乎在没有 .Render() 的情况下实现了它。

谁能给我解释一下这个秘密?

【问题讨论】:

标签: asp.net-mvc razor telerik telerik-grid


【解决方案1】:

@( ) 语法只允许此命令跨越多行(否则会错误地将换行符解释为语句的结尾)并且不会影响编码。

你是对的 - 他们正在输出一个 MvcHtmlString 以避免自动 Razor 编码。

更具体地说,所有这些方法都是 Builder 对象的一部分,这是一个流畅的接口,每次调用都会返回自己。 Builder 本身实现了IHtmlString,这就是为什么 .Sortable() 调用或此链中的任何其他调用将呈现未编码的 HTML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多