我创建了一个简单的自定义验证。它在服务器端工作正常(使用ModelState.IsValid
),但我想让它在客户端运行。
常规验证器,如Required
和RegularExpression
在客户端工作得很好。
我的自定义属性:
public class UniqueSkuAttribute : ValidationAttribute
{
public override bool IsValid(object? value)
{
if (value == null)
{
return false;
}
// IsValueExist() is my own method
return IsValueExist(value.ToString());
}
}
字符串
我的财产:
[Required(ErrorMessage = "Value is needed")]
[UniqueSku(ErrorMessage = "Value already exist")]
[RegularExpression("^\\d{11}[a-zA-Z]{2}$", ErrorMessage = "Value in template of: 01234567890xx")]
public string SKU { get; set; }
型
使用该属性视图:
<div class="form-floating mb-3 mt-3">
<input asp-for="SKU" maxlength="13" class="form-control" placeholder="SKU">
<label asp-for="SKU">Project SKU</label>
<span asp-validation-for="SKU" class="text-danger"></span>
</div>
型
此外,我当然还添加了_ValidationScriptsPartial.cshtml
文件作为每个视图页面的一部分。
有一个原因,为什么自定义验证器是不工作的客户端?
2条答案
按热度按时间h22fl7wq1#
IsValueExist
的逻辑需要在客户端复制,并添加到不显眼的验证库中,以使其工作,如下所示:C#语言
字符串
JS
型
s8vozzvw2#
基本上,你需要在你的客户端实现这一点。
例如,假设你有一个像下面这样的模型:
字符串
您可以在客户端模板中引用它,如下所示:
型
在模板中查找属性
asp-validation-for
属性,该属性在客户端执行魔术,将模型类中的验证配对到模板中。作为参考,请参阅链接here。