我有一个模型,用于验证字段是否为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标记,或者验证消息不正确?任何帮助,将不胜感激。
答案 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\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\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自定义验证和模型验证文章