有人可以解释以下是如何实现的。 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() 的情况下实现了它。
谁能给我解释一下这个 secret ?
最佳答案
@( ) 语法只允许此命令跨越多行(否则会错误地将换行符解释为语句的结尾)并且不会影响编码。
你是对的 - 他们正在输出一个 MvcHtmlString ,它避免了自动 Razor 编码。
更具体地说,所有这些方法都是 Builder 对象的一部分,这是一个流畅的接口(interface),可以从每次调用中返回自身。 Builder 本身实现了 IHtmlString ,这就是为什么 .Sortable() 调用或此链中的任何其他调用将呈现未编码的 HTML。
关于asp.net-mvc - Razor - 在没有 Render() 和没有编码的情况下渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6777331/