سؤال

الحلاقة تشفر سلسلة بشكل افتراضي. هل هناك بناء جملة خاص لتقديمه دون تشفير؟

هل كانت مفيدة؟

المحلول

منذ 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top