手动触发特定表单元素的验证

时间:2013-11-06 12:47:32

标签: c# asp.net webmatrix asp.net-webpages webmatrix-2

我正在使用Validation.Add()Html.TextBox()(以及相关的)帮助程序以及不引人注目的JavaScript错误检查,我对结果非常满意。它使用一组代码覆盖服务器和客户端,通常我已经能够实现我需要的一切。

我遇到了一些障碍,但有些时候你需要运行自己的逻辑来建立一个错误案例。如果这个错误直接与一个字段有关,那么用一个任意的错误信息手动标记该字段作为错误的来源会很好 - 我很确定没有办法开箱即用。为了澄清我的意思,一个示例是用户名的字段,需要检查用户名是否已被使用 - 如果是,则生成错误。

目前,我正在使用Validation.AddFormError()将其添加到表单错误集合中,这可以正常工作,但仅在摘要中显示错误。在上面的例子中,看起来错误显然与用户名字段有关,能够将该错误与相应的字段名称联系起来(并在正确的位置显示)似乎是合乎逻辑的。

我应该从RequestFieldValidatorBase派生并制作一个只返回falseIsValid()的验证器吗?显然,作为服务器端检查我不希望在客户端检查它,虽然我知道通过为验证系统编写更具体的验证器和插件也可以实现,暴露更多data-属性和执行AJAX检查。我对这个问题感兴趣的是一个更通用的解决方案:将特定字段标记为服务器端错误的来源。

希望这是有道理的。人们会建议什么作为解决这个问题的最佳方法?

1 个答案:

答案 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."));
}