如何使用 Blazor 中的数据注释验证器验证两个字段是否匹配?



我对开发相当陌生,并尝试使用 Blazor 学习 C# 开发。我目前正在学习如何使用EditForms构建表单并使用DataAnnotationsValidator进行验证。

在继续处理表单之前,我已经成功地完成了验证所需的大部分工作,但是,我在验证的一个重要方面遇到了麻烦:我正在处理的表单是新用户的注册表。通常,在注册新用户时,您可能希望让用户重新输入电子邮件地址或密码等值,以确保他们正确键入了该值:

<InputText @bind-Value=User.email id="email" /><br />
<ValidationMessage For=@( () => User.email) />
<label for="confirm">Confirm Email</label><br />
<InputText @bind-Value=User.confirm id="confirm"/><br />

为了验证这些字段,我有类 UserModel,我已将其实例化为 User()。

@code
{
UserModel User = new UserModel();
class UserModel
{
[Required]
[EmailAddress(ErrorMessage = "Please enter a valid email address.")]
public string email { get; set; }
[Required]
[EmailAddress(ErrorMessage = "Please confirm your email address.")]
[Compare(email, ErrorMessage = "The email addresses you entered did not match.")]
public string confirm { get; set; }
public string fname { get; set; }
public string lname { get; set; }
public string pwd { get; set; }
public string error = "";
public void Submit()
{
}
}

在Microsoft的DataAnnotationsValidator文档中,我找到了一个类CompareAttribute,根据文档"提供了一个比较两个属性的属性"。我相信这会满足我的需要,但我在使用它时遇到了麻烦。Compare接受参数otherProperty我相信这将是我尝试匹配的其他用户输入,但是,我不知道如何将以前的输入作为此参数传递。

我已经尝试过email,但是,需要对象引用。我似乎不想在类本身中引用该类的实例,所以我尝试this.email但收到错误"关键字'this'在当前上下文中不可用"。

如果有人能帮助我找出在我的情况下使用Compare类的正确方法,我将不胜感激。否则,如果我吠错了树,请告诉我。谢谢!

对于 Blazor 应用,Microsoft创建新的 NuGet 包Microsoft.AspNetCore.Components.DataAnnotations.Validation 用于DataAnnotationsValidator组件。此库在与以前的[Compare]属性相同的命名空间中定义属性[CompareProperty],它是直接替换的属性。

工作示例:

@using System.ComponentModel.DataAnnotations;
<EditForm Model="@_user" OnValidSubmit="HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<label>
Email:
<InputText @bind-Value="_user.Email" />
</label>
<label>
Confirm:
<InputText @bind-Value="_user.ConfirmEmail" />
</label>
<button type="submit">Submit</button>
</EditForm>
@code {
private User _user = new User();
private void HandleValidSubmit()
{
Console.WriteLine("OnValidSubmit");
}
public class User
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[CompareProperty("Email")]
public string ConfirmEmail { get; set; }
}
}

可以在文档中详细了解为什么 Blazor 应用不需要使用[Compare]属性。

我的问题在这篇文章 stackoverflow.com/a/13237249/842935 中得到了回答(感谢Dani Herrera指出这一点)。

参数是一个字符串,表示要与之比较的属性的名称。因此,以下代码将完成我试图完成的任务:

[Compare("email", ErrorMessage = "The email addresses you entered did not match.")]

相关内容

  • 没有找到相关文章

最新更新