2011-07-21 25 views
5

Ai đó có thể vui lòng giải thích cách thực hiện những điều sau đây. Thành phần Telerik Grid sẽ tạo HTML không được mã hóa với mã sau:Dao cạo - Hiển thị mà không cần Render() và không cần mã hóa

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

Có lẽ điều này xảy ra vì cuộc gọi phương thức được bao bọc trong "@ (....)". Bất cứ khi nào tôi thử điều này với các thành phần của riêng tôi kết quả được mã hóa Html. Tôi biết rằng tôi có thể sử dụng Render() để đầu ra một MvcHtmlString và sau đó Html của tôi không được mã hóa nhưng lưới Telerik dường như đạt được nó mà không có .Render().

Có ai có thể giải thích bí mật cho tôi không?

+1

Chúng đang trả về 'IHtmlString' thay vì chuỗi' chuẩn' mà MVC không mã hóa. http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx – Buildstarted

Trả lời

3

Cú pháp @() chỉ cho phép lệnh này mở rộng nhiều dòng (nếu không ngắt dòng sẽ được diễn giải - không chính xác - khi kết thúc câu lệnh) và không ảnh hưởng đến mã hóa.

Bạn đang đúng - chúng xuất ra MvcHtmlString để tránh mã hóa Razor tự động.

Cụ thể hơn, tất cả các phương pháp đó là một phần của đối tượng Builder, một giao diện thông thạo tự trả về từ mọi cuộc gọi. Bản thân Builder thực hiện IHtmlString, vì vậy đó là lý do tại sao cuộc gọi .Sortable() hoặc bất kỳ cuộc gọi nào khác trong chuỗi này sẽ hiển thị mã HTML không được mã hóa.

Các vấn đề liên quan