2

フィールドに属性を使用するモデルを使用したMVCアプリケーションがあり[Required]ます。この属性の検証が失敗した場合、エラーメッセージにハイパーリンクを表示したいと思います。

を追加する<a href="link">link</a>と、リンクのテキストがエラーメッセージにそのまま表示されます。?を使用して表示されるエラーメッセージにリンクを表示するにはどうすればよいHtml.ValidationMesssageFor(model=>model.attibute)ですか?

Razorビューエンジンを使用しています。

ハイパーリンクを表示するために、エラーメッセージに任意のスタイルを追加できますか?

4

2 に答える 2

1

ソリューションのどこかに次のような拡張メソッドを作成します。

using System.Web;
namespace MvcApplication.Extensions
{
    public static class HtmlStringExtensions
    {
        public static IHtmlString Raw(this IHtmlString htmlString)
        {
            return new HtmlString(HttpUtility.HtmlDecode(htmlString.ToString()));
        }
    }
}

次に、各ビューに次のusingステートメントを追加します。

@using MvcApplication.Extensions

または、web.configに以下を追加することもできます

<pages>
      <namespaces>
        <add namespace="MvcApplication.Extensions" />
      </namespaces>
</pages>

これらの2つの手順を実行すると、ValidationMessageFor()呼び出しを次のように変更することで、探しているように、エンコードされていないhtml文字列を取得できるようになります。

Html.ValidationMesssageFor(model=>model.attibute).Raw()
于 2011-06-02T23:21:06.293 に答える
0

検証テキストは、ValidationSumary または ValidationFor などの前にエンコードされます...

HTMLをデコードしてから、MvcHtmlStringを作成するだけです...

例:

@HttpUtility.HtmlDecode(Html.ValidationSummary().ToString()).ToMvcHtmlString()

これは、 MvcHtmlString を作成するために作成した拡張機能です。

namespace System
{
    public static class StringExtension
    {
        public static System.Web.Mvc.MvcHtmlString ToMvcHtmlString(this string value)
        {
        return System.Web.Mvc.MvcHtmlString.Create(value);
        }
    }
 }

または、これを再利用する予定がある場合は、HtmlHelper を作成できます。

namespace System.Web.Mvc.Html
{
    public static class FormHelper
    {
        public static MvcHtmlString ValidationSummaryEx(this HtmlHelper htmlHelper, bool excludePropertyErrors)
        {
            var original = htmlHelper.ValidationSummary(excludePropertyErrors);
            var decoded = HttpUtility.HtmlDecode(original.ToString());
            return decoded.ToMvcHtmlString();
        }
    }
}

あなたや将来の視聴者に役立つことを願っています。注: すべての検証 Summary および ValidationFor ... で機能します。

于 2014-07-08T17:35:55.057 に答える