Вопрос по asp.net-mvc-3 – Ссылка в проверочном сообщении

7

Можно ли поместить HTML-ссылку в сводное сообщение проверки? Например, я хочу поставить ссылку на другую страницу в случае ошибки проверки:

@Html.ValidationSummary(False, "read <a href=""anotherpage.html"">more</a>")

или же

@Html.ValidationSummary(False, "read " &
    Html.ActionLink("more", "helpforerror").ToHtmlString)

Но в браузере тег экранирован, поэтому он не образует ссылку.

Ваш Ответ

6   ответов
0

с текстом ссылки:

<div id="divToUpdate">

</div>

$('form').submit(function(){
   if(!this.valid())
       $('#divToUpdate').html("read <a href='anotherpage.html'>more</a>"); 
});
4

. Д.

вам просто нужно декодировать 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 ...

Error: User Rate Limit ExceededHtml.ValidationSummary()Error: User Rate Limit Exceeded@Html.RawError: User Rate Limit Exceeded.ToMvcHtmlString()
3

создать div, содержащий ссылку и т. Д. Вне сводки проверки, и добавлять div только в том случае, если состояние модели недопустимо:

@If Not ViewData.ModelState.IsValid Then
    @<div>read <a href="anotherpage.html">more</a></div>
End If

Это вдохновленоответ на аналогичный вопрос.

6

что вы приняли ответ, но я думаю, что мое решение более простое и потребует меньше переписывания, если вы хотите добавить ссылки на существующие сводки проверки.

Вам нужно положить{0} типэлемент формата в сообщении о подтверждении, как показано ниже, которое будет заменено вашей ссылкой.

ModelState.AddModelError("", "Some error message with a link here {0}.");

тогда, по вашему мнению, вызовите ваше резюме проверки так:

@string.Format(Html.ValidationSummary().ToString(), Html.ActionLink("Click Here", "Action_To_Link_To")).ToHtmlString()

В этом случае я использовал метод расширения, который я добавил к строковому объекту..ToHtmlString() это в основном просто конвертирует строку в HtmlString, предотвращая экранирование любой разметки. это выглядит так:

public static HtmlString ToHtmlString(this String str)
{
    return new HtmlString(str);
}
Error: User Rate Limit ExceededHtml.ValidationSummary() == nullError: User Rate Limit ExceededHtml.Raw()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Endy Tjahjono
0

вы можете использовать этот один вкладыш:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToHtmlString()))

Это очень похоже на то, что предложил @Benoit, просто без необходимости расширения.

2

поведение по умолчанию не позволяет этого, но вы можете сделать свое собственное. Это то, что вам нужно:HTML сырье в валидации

Похожие вопросы