验证消息未出现在无效的URL中

时间:2017-02-27 16:33:04

标签: c# asp.net-mvc validation

我有一个模型,用于验证字段是否为URL。

    /// <summary>
    /// Gets or sets the url of the event.
    /// </summary>
    [DisplayName("Event URL")]
    [Url(ErrorMessage = "URL must be a valid URL.")]
    public string EventURL { get; set; }

另外,我的模型中有一些自定义验证。我通过检查ModelState.IsValid属性以及:

来验证模型
            var validationResults = new List<ValidationResult>();

            bool isValid = Validator.TryValidateObject(
                model,
                new ValidationContext(model, null, null),
                validationResults,
                false);

我返回更新模型的视图和属性SubmissionErrors,其中包含验证模型的验证结果。然后我return View(model);

在我看来,我有一个验证框,可以在发生错误时显示。它应显示所有验证结果和任何其他错误。我已经在@Html.ValidationMessageFor(m => m.EventURL)@Html.ValidationSummary()投入,他们都没有在用户提交无效网址时向用户显示错误。我不确定我做错了什么,我似乎找不到任何理由为什么会这样。我是否错误地使用了URL标记,或者验证消息不正确?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

TryValidateObject validateAllProperties设置为true

如果validateAllProperties参数为true,则验证所有属性 如果不是,则只检查required属性

  bool isValid = Validator.TryValidateObject(
                        model,
                        new ValidationContext(model, null, null),
                        validationResults,
                        true);
  

导入注意:如果不需要model属性,则不是null值   验证

您的模型属性不是必需的。添加属性必需,然后将验证

        [DisplayName("Event URL")]
        [Url(ErrorMessage = "URL must be a valid URL.")]
        [Required(ErrorMessage = "Field Must be Required")]
        public string EventURL { get; set; }

另一种方式

  

如果必须要求Model属性

  public ActionResult About(Aboute model)
            {
                var validationResults = new List<ValidationResult>();
                // Clear ModelState check after validate
                ModelState.Clear();
                // Get validate ErrorMessage and status if you need.
                // This code not set modelState
                bool isValid = Validator.TryValidateObject(
                    model,
                    new ValidationContext(model, null, null),
                    validationResults,
                    true);
              // Check View Model validation and set modelState    
              TryValidateModel(model);

               return View(model)
            }

或将使用CutomValidation

   public class CustomUrlAttribute : ValidationAttribute
    {
        public CustomUrlAttribute()
        {

        }

        private bool IsUrlValid(string url)
        {
            string pattern =
                @"^(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$";
            Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
            return reg.IsMatch(url);
        }

        public override bool IsValid(object value)
        {
            if (value == null)
            {
                ErrorMessage = "Field Must be required";
                return false;
            }
            string strValue = value as string;

            if (!IsUrlValid(strValue))
            {
                ErrorMessage = "Invalid URL";
                return false;
            }

            return true;
        }
    }



 public class ContactModel
    {
        [DisplayName("Event URL")]
        [CustomUrlAttribute()]           
        public string EventURL { get; set; }    
    }
  

您可以在此处查看dataAnnotations模型验证的示例   bilisim.io自定义验证和模型验证文章

相关问题