在实现登录功能时,我在Blazor服务器应用程序中遇到了Blazore.FluentValidation的问题.以下是我的登录组件代码:
<EditForm class="needs-validation" Model="@Input" OnValidSubmit="@SubmitAsync" FormName="login" novalidate>
<FluentValidationValidator @ref="@_fluentValidationValidator" />
<DataAnnotationsValidator />
<AuthInput Id="email" ErrorFeedback="" Label="Email Address"
TextFieldType="TextFieldType.EmailAddress"
@bind-Value="Input.Email" PlaceHolder="Email Address here"
ValidationFor="@(() => Input.Email)" />
<AuthInput Id="password" ErrorFeedback="" Label="Password"
TextFieldType="TextFieldType.Password"
PlaceHolder="********" @bind-Value="Input.Password"
ValidationFor="@(() => Input.Password)" />
<div class="d-lg-flex justify-content-between align-items-center mb-4">
<div class="form-check"></div>
<a href="/Identity/Account/ForgotPassword">Forgot your password?</a>
</div>
<Button Text="Sign In" ButtonType="ButtonType.Submit" IsFullWidth="true" />
我的AuthInput组件
@using Microsoft.AspNetCore.Components.Forms
@using System.Linq.Expressions
@inherits InputBase<string>
<div class="@ColSize">
<div class="mb-3">
<label for="@Id" class="form-label">@LabelText</label>
<input id="@Id" name="@FieldName" @attributes="@AdditionalAttributes" class="form-control" type="@_type"
required="@IsRequired" @bind="@Value" placeholder="@PlaceHolder" />
<ValidationMessage For="ValidationFor" />
<div class="invalid-feedback"></div>
</div>
</div>
@code{
[Parameter] public string Id { get; set; }
[Parameter] public string LabelText { get; set; }
[Parameter] public string ColSize { get; set; }
[Parameter] public string FieldName { get; set; }
[Parameter] public string PlaceHolder { get; set; }
[Parameter] public bool IsRequired { get; set; } = false;
[Parameter] public TextFieldType TextFieldType { get; set; } = TextFieldType.Text;
[Parameter] public Expression<Func<string>> ValidationFor { get; set; } = default!;
private string _type => TextFieldType == TextFieldType.Text ? "text" :
TextFieldType == TextFieldType.Number ? "number" :
TextFieldType == TextFieldType.Password ? "password" :
TextFieldType == TextFieldType.EmailAddress ? "email" :
"text";
protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage)
{
result = value;
validationErrorMessage = null;
return true;
}
}
在代码隐藏中,我声明:
private FluentValidationValidator? _fluentValidationValidator;
private bool Validated => _fluentValidationValidator!.Validate(options => {
options.IncludeAllRuleSets(); });
private TokenRequestModel Input { get; set; } = new();
空引用异常: 根据文档,验证方法不应导致空引用异常.尽管在options.IncludeAllRuleSets()中包含了所有规则集,但我仍然面临这个错误.任何基于Blazore.FluentValidation文档的对原因的见解或解决方案的建议都将不胜感激.
我已经遵循了Blazored.FluentValidation源代码控制的文档,但这些问题仍然存在.解决这些Blazored.FluentValidation问题的任何帮助、建议或代码示例.