2010-01-30 17 views
5

Có trình trợ giúp Html nào đơn giản chấp nhận và trả về html thô không? Thay vì làm điều gì đó xấu xí như thế này:MVC2: Có Trình trợ giúp Html cho Html nguyên không?

<% if (Model.Results.Count > 0) { %><h2>Results</h2><% } %> 

Tôi muốn làm điều gì đó như thế này:

<% if (Model.Results.Count > 0) { Html.RawHtml("<h2>Results</h2>") } %> 

Không nhiều sạch toàn bộ, nhưng tôi nghĩ đó là một chút của một sự cải tiến. Có cái gì đó như thế tồn tại? Hoặc là có lẽ một lựa chọn tốt hơn để xuất html nguyên liệu từ bên trong những ký tự thoát hơn so với sử dụng trợ giúp Html?

+0

Bây giờ tôi nghĩ về nó, bạn sẽ mất khả năng IntelliSense và phân tích cú pháp html bằng cách chỉ sử dụng một chuỗi chữ như thế. Với một ví dụ đơn giản như trên, đó không thực sự là một vấn đề lớn, nhưng tôi đoán với html phức tạp hơn nó có thể được. –

Trả lời

5

Trả lời.Write sẽ hoạt động. (Mặc dù có thể đó là loại lùi một bước!) Bạn sẽ có thể tạo ra một phương pháp mở rộng để làm điều đó. Và có thể thay vì sử dụng chuỗi HTML, bạn có thể muốn tạo đánh dấu của mình bằng mã số using the TagBuilder.

0

Có helper như bây giờ:

Html.Raw("<h2>Results</h2>") 
+4

Nó chỉ có sẵn trong MVC3 và không có trong MVC2. –

11

Đối MVC2:

<%: MvcHtmlString.Create("<h2>Results</h2>") %> 

Tìm thấy ở đây:

store and display html tags in MVC

+0

Người đàn ông giỏi! Cảm ơn! –

+0

Điều này làm việc cho tôi – Ronnie

1

Nếu bạn muốn sử dụng một HtmlHelper cho bất cứ điều gì bạn' làm lại, bạn có thể trả về một MvcHtmlString được xây dựng với một TabBuilder

Dưới đây là một ví dụ về một mà tôi sử dụng:

public static MvcHtmlString AccountsDropDown(this HtmlHelper helper, string name, object htmlAddributes = null, bool addNull = false, Guid? selected = null) 
    { 
     Account acc = HttpContext.Current.Session["account"] as Account; 

     TagBuilder tb = new TagBuilder("select"); 

     tb.GenerateId(name); 
     tb.Attributes["name"] = name; 

     if (addNull) 
      tb.InnerHtml += string.Format("<option value= '{0}'> {1} </option>", "", "None"); 


     Dictionary<Guid, String> accounts; 

     if (acc.Master) 
      accounts = db.Account.ToDictionary(x => x.Id, x => x.Name); 
     else 
      accounts = db.Account.Where(x => x.Id == acc.Id).ToDictionary(x => x.Id, x => x.Name); 

     foreach (var account in accounts) 
      tb.InnerHtml += string.Format(
       "<option value= '{0}' {2}> {1} </option>", 
       account.Key, 
       account.Value, 
       selected == account.Key ? " selected='selected' " : "" 
      ); 

     return new MvcHtmlString(tb.ToString()); 
    }