如何将“IHtmlString”更改为“MvcHtmlString”?

时间:2012-06-21 17:40:00

标签: asp.net asp.net-mvc-3

目前我正在编写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>" +
                                "<span class=\"ui-icon ui-icon-alert\" style=\"float: left; margin-right: .3em;\"></span>" +
                                "<strong>Validation Exceptions:</strong></div><div style=\"margin-top: 5px;\"> " + 
                                "<ul style=\"font-weight: normal;\">{0}</ul></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("<li>{0}</li>", 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);
    }

1 个答案:

答案 0 :(得分:1)

虽然我希望StringBuilder.ToString()隐式调用string.Format()方法,但如果没有发生,请显式调用ToString()方法,如下所示:

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

此外,您的方法被声明为返回IHtmlString。如果您更改签名以使用MvcHtmlString,那将告诉编译器您想要的返回类型。此时,只需确保返回值与更新的声明匹配:

return MvcHtmlString.Create(string.Format(template, exceptionList.ToString()));