1

現在、「IHtmlString」を使用している実装を拡張するために 2 つのヘルパー メソッドを作成していますが、「MvcHtmlString」を使用してこれを 1 つのメソッドに変換するにはどうすればよいですか? ヘルプ...

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);
    }
4

1 に答える 1

1

StringBuilder.ToString()メソッドが によって暗黙的に呼び出されることを期待していますが、そうでない場合は、次のようにメソッドstring.Format()を明示的に呼び出します。ToString()

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

また、メソッドは を返すように宣言されていIHtmlStringます。シグネチャを useMvcHtmlStringに変更すると、希望する戻り値の型がコンパイラに通知されます。この時点では、戻り値が更新された宣言と一致することを確認するだけです。

return MvcHtmlString.Create(string.Format(template, exceptionList.ToString()));
于 2013-03-26T20:10:47.123 に答える