asp.net - كيف يعمل Html.Raw مفك؟




asp.net-mvc razor (2)

يمكنني استخدام Html.Raw لطباعة محتوى هتمل الخام، على سبيل المثال عندما أرسل شيئا مثل ViewBag.div = "<div> Hello </div>"; من وحدة التحكم إلى جانب العرض فإنه لا طباعة محتوى هتمل الخام إلا إذا كنت تستخدم طريقة Html.Raw ولكن إذا كان لدي محتوى مشفرة، مثل المحتوى المشفرة باستخدام مسج وإدراجها في قاعدة البيانات وأريد طباعته كما الخام محتوى هتمل لا تعمل طريقة Html.Raw ولدي لاستخدام HttpUtility.HtmlDecode(EncodedContent) قبل أن أستخدم Html.Raw لذا يرجى أن يفسر أي شخص لماذا يعمل بهذه الطريقة وما هو الوضع السليم لاستخدام طريقة Html.Raw ؟ أو بطريقة أخرى، لماذا لا يعمل هتمل. Html.Raw عندما يتلقى كيانات هتمل كمعلمة بدلا من علامات هتمل ؟.


Html.Raw الأسلوب يسأل المحرك رازور لا ترميز الأحرف الخاصة .

محرك الشفرة ترميز الأحرف الخاصة لأنه يعتبر أنك تريد أن تظهر لهم في الحالة التي أرسلت إليها لذلك ترميز الأحرف الخاصة والمستعرض فك رموزها مرة أخرى لتظهر لك لهم في الحالة الأصلية (الدولة التي أرسلتها إلى محرك الحلاقة)، ​​ولكن إذا كنت تستخدم Html.Raw وهذا يعني أن تطلب من محرك رازور لا ترميز الأحرف الخاصة من المحتوى الخاص بك، وهذا لا يعني أن كنت تطلب منه فك شفرة المحتوى المشفرة الخاص بك مثل المحتوى الذي تحصل عليه من قاعدة البيانات، فإنه يطلب فقط من المحرك إلى لا ترميز الأحرف الخاصة حتى إذا كان لديك محتوى مشفر في قاعدة البيانات لديك لفك ذلك باستخدام HttpUtility.HtmlDecode ثم أن نسأل محرك الحلاقة لا ترميز علامات هتمل التي تم إرجاعها باستخدام Html.Raw .

ل إكسمبل إذا كان لديك هذا المحتوى في قاعدة البيانات الخاصة بك

&lt;h1&gt;dklxf;&lt;span style="font-style: italic;"&gt;kldk;dlk&lt;span style="font-weight: bold;"&gt;dxl'f;dlxd'fdlf;ldk;dlkf&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

الآن إذا قمت بطباعته دون استخدام HTML.Raw محرك الحلاقة سوف ترميز الأحرف الخاصة في هذا المحتوى ليتم طباعتها في المتصفح كما هو ولكن إذا كنت تستخدم HTML.Raw وهذا يعني أن لا تفعل أي شيء على المحتوى حتى المتصفح سوف تجعلها مجموعة من العلامات هتمل التي لديها محتوى داخله ولكن ليس البيانات المنسقة، سوف تحصل على شيء مثل:

<h1>dklxf;<span style="font-style: italic;">kldk;dlk<span style="font-weight: bold;">dxl'f;dlxd'fdlf;ldk;dlkf</span></span></h1></p>

ولكن إذا كنت تستخدم Html.Raw(HttpUtility.HtmlDecode(EncodedContent)) فستحصل على بيانات منسقة في صفحتك مثل المحتوى التالي لأن المحتوى الذي يتم إرساله إلى المتصفح هو علامات هتمل ليست كيانات

dklxf. كلدك؛ dlk dxl'f؛ dlxd'fdlf؛ لك؛ دلكف


لأن الأحرف المشفرة هي هتمل، والإصدار الخام من تلك السلسلة هو المرمز.

Html.Raw يجعل ما يتم تقديمه دون القيام بأي ترميز هتمل، وذلك مع ViewBag.div = "<div> Hello </div>"; :

@Html.Raw(ViewBag.div);

يجعل

<div> Hello </div>

ومع ذلك، عندما يكون لديك أحرف مشفرة في هناك، مثل ViewBag.Something = "&gt;"; النسخة الخام من هذا هو &gt; . للعودة إلى هتمل الفعلية تحتاج إلى Html.Raw(HttpUtility.HtmlDecode(EncodedContent)); كما قلت.

إذا فعلت Html.Raw فك ثم سيكون مربكا، ونحن بحاجة إلى شيء لم يفعل ذلك. ؛-)





html-encode