【问题标题】:Perform Remote Validation with .NET core使用 .NET 核心执行远程验证
【发布时间】:2019-05-30 06:49:26
【问题描述】:

有些事情我认为很简单,但显然不是,原因我目前还不清楚。

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

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

除了这个方法的输入参数总是到达null,所以它不会接收到用户输入的email地址。

我看到变量的名称应该和我的模型的名称相同,并且是这样(至少我认为?!)。

你有什么想法吗?

模型直接在 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>

【问题讨论】:

  • 请在视图中添加您的型号参考代码!

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


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 2019-11-03
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多