2012-02-16 38 views
6

Tôi đang sử dụng EF4 + MVC 3 với Dao cạo.EF MVC RAZOR: Cách giải mã các chuỗi được mã hóa HTML của đầu ra PartialView?

Tôi có ActionResult sau đây, hiển thị Dictionary<string,string> thành chế độ xem một phần.

HÀNH ĐỘNG

public ActionResult combotest() 
{ 
    Dictionary<string, string> r = new Dictionary<string, string>(); 
    r.Add("<> ''", "T"); 
    ... 
    return PartialView("_mypartial", r); 
} 

Bây giờ, ký tự đặc biệt chứa vào Model.Key giá trị là HTML Encoded, trong khi tôi muốn sử dụng chúng dưới dạng văn bản đơn giản. Ví dụ: <> '' được hiển thị là &lt;&gt; &#39;&#39;.

Tôi cố gắng để chuyển đổi chúng với WebUtility.HtmlDecode hoặc Server.HtmlDecode nhưng không thành công:

MỘT PHẦN XEM (_mypartial):

<select> 
    <option value=''></option> 
    @foreach (KeyValuePair<string,string> value in (Dictionary<string, string>)Model) 
    { 
     <option value="@WebUtility.HtmlDecode(value.Key)">@value.Value 
    </option> 
    } 
</select> 

Ông có thể giúp tôi? Tôi sẽ tránh sử dụng String.Replace, nếu có thể.

+0

Bạn có thể chỉ định điều gì đã xảy ra với hai cách tiếp cận khác không? – linkerro

Trả lời

18

Để hiển thị văn bản unencoded bạn có thể sử dụng @Html.Raw(value.key)

+0

Cảm ơn bạn rất nhiều James! – Larry

2

Larry,

thử điều này:

<select> 
    <option value=''></option> 
     @foreach (KeyValuePair<string,string> value in (Dictionary<string, string>)Model) { 
     <option value="@Html.Raw(value.Key)">@value.Value 
    </option> 
    } 
    </select> 

Html.Raw() trả về một thể hiện HtmlString rằng kết thúc tốt đẹp chuỗi gốc. Động cơ Dao cạo không biết thoát khỏi các phiên bản HtmlString, do đó hiển thị như dự định.

+0

Cảm ơn bạn rất nhiều Jim! Tôi chấp nhận câu trả lời của James chỉ vì đó là câu trả lời đầu tiên. +1 THX – Larry

+1

không phải lo lắng - đó là cách tôi cũng sẽ chơi nó;) –

0

Cân nhắc không sử dụng 'chuỗi' ở địa điểm đầu tiên, nhưng thay vào đó là IHtmlString, ví dụ: HtmlString.

Ví dụ:

public ActionResult combotest() { Dictionary<IHtmlString, string> r = new Dictionary<IHtmlString, string>(); r.Add(new HtmlString("<> ''"), "T"); ... return PartialView("_mypartial", r); }

<select> <option value=''></option> @foreach (KeyValuePair<IHtmlString,string> value in (Dictionary<IHtmlString, string>)Model) { <option value="@value.Key">@value.Value </option> } </select>

Bây giờ, bạn không cần phải dựa trên một hợp đồng bảo đảm ngầm giữa quan điểm (sử dụng Html.Raw) và bộ điều khiển (cung cấp văn bản đó là hy vọng an toàn). Bạn đang cung cấp Html hợp lệ, an toàn và đánh dấu nó như vậy từ nguồn.

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