两个属性提供相同的功能,只使用一种远程验证方法

时间:2016-09-03 15:12:24

标签: c# asp.net

在两个提供相同功能的属性中,是否可以只使用一种方法进行远程验证?例如,我有两个用于存储电子邮件的属性:第一个属性只会获取没有扩展名的电子邮件地址(例如[name] @ email.com);第二个是获取整个电子邮件地址(例如[name@email.com])。

型号:

[MaxLength(50), Display(Name = "Email Address.")]
[Remote("CheckExistingEmail", "Account", AdditionalFields = "EmailExtension", ErrorMessage = "Email already exists")]
public string EmailWithoutExtension { get; set; }

[Email, MaxLength(100), Display(Name = "Email Address")]
[Remote("CheckExistingEmail", "Account", ErrorMessage = "Email already exists.")]
public string EmailWithExtension { get; set; }

[HiddenInput]
public string EmailExtension { get; set; }

控制器:

[AjaxOnly, AllowAnonymous]
public ActionResult CheckExistingEmail(string EmailWithExtension)
{
    if(string.IsNullOrEmpty(EmailWithExtension))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    var userEmail = AccountManager.FindByEmail(EmailWithExtension);
    if (userEmail == null)
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json(false, JsonRequestBehavior.AllowGet);
}

我尝试了两个不起作用的属性的方法重载,因为这会混淆远程验证。我也想在一个变量中绑定属性,但不确定我将如何做到这一点。关于如何在不创建提供相同功能的不同方法名称的情况下实现此目的的任何建议?

1 个答案:

答案 0 :(得分:0)

我想出了怎么做。所以我只需添加所有参数并检查哪个参数值然后验证该值。

[AjaxOnly, AllowAnonymous]
public ActionResult CheckExistingEmail(string emailWithoutExtension, string emailWithExtension, string emailExtension)
{
    if(string.IsNullOrEmpty(emailWithoutExtension) && string.IsNullOrEmpty(EmailWithExtension))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    var email = string.Emtpy;
    if(!string.IsNullOrEmpty(emailWithoutExtension)) && !string.IsNullOrEmpty(emailExtension))
    {
        email = emailWithoutExtension + emailExtension;
    }

    if(!string.IsNullOrEmpty(emailWithExtension) && string.IsNullOrEmpty(emailWithoutExtension))
    {
        email = emailWithExtension;
    }

    var account = AccountManager.FindByEmail(email);
    if (account == null)
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json("Email already exists try another.", JsonRequestBehavior.AllowGet);
}

通过执行上述代码,两个属性都只使用一种方法。