2011-07-21 25 views
5

Birisi aşağıdakilerin nasıl elde edildiğini açıklayabilir. Telerik Izgara bileşeni aşağıdaki kodla olmayan kodlanmış HTML oluşturur: yöntem çağrısı "@ (....)" sarılır çünküRazor - Render olmadan Render() ve Kodlama olmadan

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

Tahminen bu olmuyor. Bunu kendi bileşenlerimle her denediğimde sonuç kodlanmış Html'dir. Bir MvcHtmlString çıktılamak için Render() kullanabileceğimi ve sonra Html kodlanmadığımı biliyorum, ancak Telerik ızgarası .Render() olmadan bunu başardı.

Sırrı bana açıklayan var mı?

+1

MVC'nin kodlamadığı bir standart 'dize 'yerine bir' IHtmlString 'döndürüyorlar. http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx – Buildstarted

cevap

3

@() sözdizimi, bu komutun birden çok satırı kapsamasına izin verir (aksi halde satır sonu, ifadenin sonu olarak yanlış bir şekilde yorumlanır) ve kodlamayı etkilemez.

Haklısınız - otomatik Razor kodlamasını önleyen bir MvcHtmlString çıktılar. Daha spesifik olarak, tüm bu yöntemler bir Builder nesnesinin parçasıdır, her aramayı geri döndüren akıcı bir arabirimdir. Oluşturucunun kendisi IHtmlString'u uygular, bu yüzden .Sortable() çağrısı veya bu zincirdeki diğer herhangi bir çağrı, HTML kodlanmamış olarak işlenmesini sağlar.