使用.NET Core执行远程验证

时间:2019-01-03 16:40:37

标签: c# ajax model-view-controller asp.net-core

我认为这很简单,但显然并非如此,原因是目前我不清楚。

我正在尝试验证要在我的网站上注册的用户的电子邮件地址。

为此,我使用[Remote]属性,该属性从另一个控制器调用一个方法并进行检查。

此方法的输入参数始终为null,因此不会接收用户输入的电子邮件地址。

我看到变量的名称应该与我的模型的名称相同,而且确实是这种情况(至少我认为?!)。

你有个主意吗?

直接在RegistrationController中建模

public class InputModel
{
    [Remote("ValidateEmail", "Home", ErrorMessage = "This email his already used.")]
    [Required]
    [EmailAddress]
    [Display(Name = "Email *")]
    public string Email { get; set; }
}



**Home Controller where the method is**



public async Task<IActionResult> ValidateEmail(string Email)
{
    var user = await _userManager.FindByNameAsync(Email);

    bool result;

    if (user.UserName == null)
    {
        result = true;
    }
    else
    {
        result = false;
    }
    return Json(result);
}

查看

            <div class="form-check-inline col-12">
                <div class="col-4">
                    <label asp-for="Input.Email"></label>
                </div>
                <input asp-for="Input.Email" class="form-control" />
            </div>
            <div style="margin-left:33%">
                <span asp-validation-for="Input.Email" class="text-danger"></span>
            </div>

1 个答案:

答案 0 :(得分:1)

对于remote validation,它将附加Input.Email作为查询字符串,但是您将参数与(string Email)绑定,它将无法绑定。

尝试用FromQuery显式绑定属性。

public async Task<IActionResult> ValidateEmail([FromQuery(Name = "Input.Email")]string Email)
{
    bool result = false;
    return Json(result);
}