我有一个表单,我正在尝试验证输入的帐户是本地帐户还是域帐户。表格如下:
表单使用基本的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查找。
你们建议什么是重新验证此字段的最佳方法?
答案 0 :(得分:1)
请记住,即使你追求选项2,你仍然应该在提交时验证数据!永远不要相信被POST的数据已经过验证。如果选择选项2,则可以让提交逻辑检查选中了哪个单选按钮,并使用正确的属性创建帐户。