2011-07-21 16 views
5

Czy ktoś może wyjaśnić, w jaki sposób następujące czynności zostały osiągnięte. Składnik Telerik Siatka generuje zakaz zakodowanego HTML następującym kodu:Maszynka do golenia - Renderuj bez Renderowania() i bez kodowania

@(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() 
) 

Przypuszczalnie to się dzieje, ponieważ wezwanie jest owinięta w sposób „@ (....)”. Ilekroć próbuję tego z własnymi komponentami wynik jest zakodowany w HTML. Wiem, że mogę użyć Render() do wyprowadzenia MvcHtmlString, a następnie mój HTML nie jest zakodowany, ale siatka Telerik wydaje się to osiągnąć bez .Render().

Czy ktoś może wyjaśnić mi tajemnicę?

+1

Powracają 'IHtmlString' zamiast standardowego' ciągu', którego MVC nie koduje. http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx – Buildstarted

Odpowiedz

3

Składnia @() zezwala na to, aby polecenie obejmowało wiele linii (w przeciwnym razie przerwa w linii byłaby interpretowana - niepoprawnie - jako koniec instrukcji) i nie wpływa na kodowanie.

Masz rację - wyprowadzają MvcHtmlString, który unika automatycznego kodowania maszynki.

Dokładniej, wszystkie te metody są częścią obiektu Builder, płynnego interfejsu, który zwraca się z każdego połączenia. Sam Builder implementuje IHtmlString, dlatego wywołanie .Sortable() lub inne wywołanie w tym łańcuchu powoduje, że kod HTML jest niekodowany.

Powiązane problemy