Подтвердить что ты не робот

Проверка правильности mvc4

Я пишу этот вопрос здесь, пытаясь найти ответ в течение двух дней.

в основном здесь, что происходит.

У меня есть свойство в viewmodel следующим образом

[Required(ErrorMessage = "Required Field")]
[Url(ErrorMessage="Please enter a valid url")]
[DisplayName("Website")]
public string web { get; set; }

в представлении, у меня есть это

@Html.EditorFor(model => model.web, new { AutoCompleteType = "Disabled", autocomplete = "off" })

теперь проблема заключается в том, как входной текст для этого поля проверяется на стороне клиента. поле должно иметь префикс протокола все время, в противном случае оно становится недействительным.

Каков наилучший способ решить эту проблему?

Большое спасибо

4b9b3361

Ответ 1

Вы можете сделать это, используя библиотеку DataAnnotationsExtensions. Они имеют UrlAttribute, которые вы можете настроить только для проверки, когда протокол указан. Этот атрибут также обеспечивает проверку на стороне клиента. Здесь вы можете увидеть пример такого поведения: http://dataannotationsextensions.org/Url/Create

Вы можете использовать этот атрибут следующим образом:

using System.ComponentModel.DataAnnotations;

namespace DataAnnotationsExtensions.Core
{
    public class UrlEntity
    {
        [Url]
        [Required]
        public string Url { get; set; }

        [Url(UrlOptions.OptionalProtocol)]
        [Required]
        public string UrlWithoutProtocolRequired { get; set; }

        [Url(UrlOptions.DisallowProtocol)]
        [Required]
        public string UrlDisallowProtocol { get; set; }
    }
}

Для ваших целей достаточно первого варианта.

Пакет этой библиотеки (включая поддержку ASP.NET MVC) можно найти на NuGet:   Install-Package DataAnnotationsExtensions.MVC3

Примечание: это также отлично работает с ASP.NET MVC 4

Ответ 2

Не уверен, что я полностью понимаю вопрос. Вы пытаетесь проверить правильность формирования URL-адресов? Если это так, вы можете реализовать стандартное выражение DataAnnotation следующим образом:

[RegularExpression(@"^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$", ErrorMessage = "My Error Message")]