我认为这很简单,但显然并非如此,原因是目前我不清楚。
我正在尝试验证要在我的网站上注册的用户的电子邮件地址。
为此,我使用[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>
答案 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);
}