كيفية تغيير "IHtmlString" إلى "MvcHtmlString"؟

حاليا أنا أكتب 2 طريقة المساعد لتوسيع تطبيق حيث أستخدم "IHtmlString" ، كيف يمكنني تحويل هذا إلى طريقة واحدة باستخدام "MvcHtmlString"؟ مساعدة...

public static IHtmlString ExceptionValidationSummary(this HtmlHelper helper)
    {
        const string template = "<div class=\"ui-widget\"><div class=\"ui-state-error ui-corner-all\" style=\"padding:0 .7em\"><div>" +
                                "" +
                                "Validation Exceptions:</div><div style=\"margin-top: 5px;\"> " + 
                                "
    {0}
</div></div></div>";

        StringBuilder exceptionList = new StringBuilder();

       //Iterate through the exceptions
        foreach (var error in helper.ViewData.ModelState.SelectMany(modelState => modelState.Value.Errors))
        {
            exceptionList.Append(string.Format("
  • {0}
  • ", error.ErrorMessage));
            }
    
            return exceptionList.Length.Equals(0) ? string.Format("").Raw() : string.Format(template, exceptionList).Raw();
    
        }
    
        public static IHtmlString Raw(this string value)
        {
            return new HtmlString(value);
        }
    
    0
    لا أفهم المشكلة - هل تريد إرجاع نسخة MvcHtmlString ملموسة بدلاً من واجهة IHtmlString مجردة؟ لماذا لا يعود مجرد نسخة MvcHtmlString مباشرة؟
    وأضاف المؤلف Dai, مصدر
    كيفية تأليف كل من "القالب" و "exceptionList" لإرجاع MvcHtmlString في حالتي أعلاه؟
    وأضاف المؤلف user584018, مصدر

    1 إجابة

    على الرغم من أنني كنت أتوقع StringBuilder.ToString() طريقة يتم استدعاؤها ضمنيًا بواسطة string.Format() ، إذا لم يحدث ذلك ، فعليك الاتصال بـ ToString() طريقة مثل هذا:

    string.Format(template, exceptionList.ToString())
    

    أيضا ، يتم تعريف الأسلوب الخاص بك لإرجاع IHtmlString . إذا قمت بتغيير التوقيع لاستخدام MvcHtmlString ، فسوف يخبر المترجم نوع الإرجاع المطلوب. عند هذه النقطة ، هي مجرد مسألة ضمان تطابق قيمة الإرجاع مع التعريف المحدث:

    return MvcHtmlString.Create(string.Format(template, exceptionList.ToString()));
    
    0
    وأضاف