剃刀 - 渲染没有渲染()和没有编码

时间:2011-07-21 14:04:21

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

有人可以解释如何实现以下目标。 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()。

有人可以向我解释这个秘密吗?

1 个答案:

答案 0 :(得分:3)

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

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

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