我正在使用Validation.Add()
和Html.TextBox()
(以及相关的)帮助程序以及不引人注目的JavaScript错误检查,我对结果非常满意。它使用一组代码覆盖服务器和客户端,通常我已经能够实现我需要的一切。
我遇到了一些障碍,但有些时候你需要运行自己的逻辑来建立一个错误案例。如果这个错误直接与一个字段有关,那么用一个任意的错误信息手动标记该字段作为错误的来源会很好 - 我很确定没有办法开箱即用。为了澄清我的意思,一个示例是用户名的字段,需要检查用户名是否已被使用 - 如果是,则生成错误。
目前,我正在使用Validation.AddFormError()
将其添加到表单错误集合中,这可以正常工作,但仅在摘要中显示错误。在上面的例子中,看起来错误显然与用户名字段有关,能够将该错误与相应的字段名称联系起来(并在正确的位置显示)似乎是合乎逻辑的。
我应该从RequestFieldValidatorBase
派生并制作一个只返回false
到IsValid()
的验证器吗?显然,作为服务器端检查我不希望在客户端检查它,虽然我知道通过为验证系统编写更具体的验证器和插件也可以实现,暴露更多data-
属性和执行AJAX检查。我对这个问题感兴趣的是一个更通用的解决方案:将特定字段标记为服务器端错误的来源。
希望这是有道理的。人们会建议什么作为解决这个问题的最佳方法?
答案 0 :(得分:0)
我以为我会回来发布我最终实施的内容,以防它可以帮助其他任何人,或者有人可以提出任何改进建议。
我添加了一个自定义验证程序,我将Throw
命名为App_Code
:
public class Throw : RequestFieldValidatorBase
{
public Throw(string errorMessage)
: base(errorMessage)
{ }
protected override bool IsValid(System.Web.HttpContextBase httpContext, string value)
{
return false;
}
}
然后为它添加了一个初始化方法,以便我可以像内置验证器一样工作(也添加到App_Code
)内联创建它们的实例:
public static class CustomValidator
{
public static Throw Throw(string errorMessage)
{
return new Throw(errorMessage);
}
}
然后在我的内容页面中,我可以执行以下操作:
if (!usernameIsValid)
{
Validation.Add("username", CustomValidator.Throw("That username is already taken."));
}