ASP.NET MVC Razor تقديم دون تشفير
-
28-09-2019 - |
سؤال
الحلاقة تشفر سلسلة بشكل افتراضي. هل هناك بناء جملة خاص لتقديمه دون تشفير؟
المحلول
منذ ASP.NET MVC 3 ، يمكنك استخدام:
@Html.Raw(myString)
نصائح أخرى
@(new HtmlString(myString))
بالإضافة إلى نهج @html.raw (السلسلة) الذي تم ذكره بالفعل ، إذا قمت بإخراج mvchtmlstring ، فلن يتم ترميزه. يمكن أن يكون هذا مفيدًا عند إضافة ملحقاتك الخاصة إلى HTMLHelper ، أو عند إرجاع قيمة من نموذج العرض الذي تعرفه قد يحتوي على HTML.
على سبيل المثال ، إذا كان نموذج العرض الخاص بك هو:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
ل Core 1.0+ (و MVC 5+) استخدم htmlstring
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
ومن بعد
<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
يستخدم @Html.Raw()
بحذر كما قد تسبب المزيد من المتاعب في الترميز والأمان. أفهم حالة الاستخدام حيث اضطررت إلى القيام بذلك بنفسي ، لكن بعناية ... فقط تجنب السماح بجميع النصوص. على سبيل المثال فقط الحفاظ/تحويل تسلسل أحرف معين وترميز الباقي دائمًا:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
ثم لديك راحة البال بأنك لم تنشأ حفرة أمان محتملة ويتم عرض أي شخصيات خاصة/أجنبية بشكل صحيح في جميع المتصفحات.
في حالة ActionLink ، فإنه يستخدم بشكل عام httputily.encode على نص الارتباط. في هذه الحالة يمكنك استخدامهاHttpUtility.HtmlDecode(myString)
لقد نجح الأمر بالنسبة لي عند استخدام htmlactionLink لفك تشفير السلسلة التي أردت تمريرها. على سبيل المثال:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
يمكنك أيضًا استخدام الطريقة التقليدية
HTML RAW:
@Html.Raw(yourString)