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

M. *_*ols 5 asp.net-mvc telerik telerik-grid razor

有人可以解释如何实现以下目标.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()
)
Run Code Online (Sandbox Code Playgroud)

大概这是因为方法调用包含在"@(....)"中.每当我用自己的组件尝试这个时,结果都是编码的Html.我知道我可以使用Render()输出MvcHtmlString,然后我的Html没有编码,但Telerik网格似乎没有.Render().

谁能向我解释这个秘密?

Jes*_*ick 3

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

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

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