如何在无线电选择更改后重新验证字段

时间:2015-06-03 16:59:24

标签: c# asp.net-mvc validation

我有一个表单,我正在尝试验证输入的帐户是本地帐户还是域帐户。表格如下:

Form preview

表单使用基本的MVC验证。我的viewmodel看起来像这样:

[Display(Name = "Account Type")]
public string AccountType { get; set; }

[Required(ErrorMessage = "{0} is required")]
[Remote ("ValidateUserID", "myController", AdditionalFields = "AccountType", ErrorMessage = "{0} cannot be found.")]
[RegularExpression(@"^[a-zA-Z0-9\-]+$", ErrorMessageResourceType = typeof(Resources.SDF), ErrorMessageResourceName = "Err_Account")]
[Display(Name = "Account")]
public string Account { get; set; }

正如您所知,我进行服务器端验证以验证(如果选择了domain无线电)域帐户是否存在。如果选择了local无线电,我的验证方法会自动允许它。

我的验证方法如下:

public JsonResult ValidateUserID(string Account, string AccountType)
{
    if (AccountType.Equals("Domain"))
    {
        //code to check domain account 
        return Json(false, JsonRequestBehavior.AllowGet);
    }

    return Json(true, JsonRequestBehavior.AllowGet);
}

我面临的问题是,如果用户选择Local,则输入本地名称。验证返回true,因此不会显示错误。如果用户随后将单选按钮更改为Domain,则不会重新验证Account字段。

因此,用户可以绕过我为域帐户执行的AD查找。

你们建议什么是重新验证此字段的最佳方法?

1 个答案:

答案 0 :(得分:1)

  1. 您应该在提交数据时对其进行验证。用户验证很有帮助,但不要相信它可以完全控制您的过程。
  2. 您可以使用两个单独的字段,并在选择域无线电选项时使一个可见,另一个在选择本地单选按钮时可见;我不是百分百肯定,但我觉得在页面而不是服务器端使用JavaScript(jQuery等)会更容易。这样,面向验证代码的用户将被正确执行。
  3. 请记住,即使你追求选项2,你仍然应该在提交时验证数据!永远不要相信被POST的数据已经过验证。如果选择选项2,则可以让提交逻辑检查选中了哪个单选按钮,并使用正确的属性创建帐户。