gpt4 book ai didi

c# - 验证 2 个组件具有相同的值

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:17 25 4
gpt4 key购买 nike

我写了一个由 4 个输入字段组成的 PIN 组件(因为它将在几个地方重复使用)

<input class="pinBox" type="password" maxlength="1" size="1" onkeypress='return event.charCode >= 48 && event.charCode <= 57' required @bind="@_pinOne"/>
<input class="pinBox" type="password" maxlength="1" size="1" onkeypress='return event.charCode >= 48 && event.charCode <= 57' required @bind="@_pinTwo"/>
<input class="pinBox" type="password" maxlength="1" size="1" onkeypress='return event.charCode >= 48 && event.charCode <= 57' required @bind="@_pinThree"/>
<input class="pinBox" type="password" maxlength="1" size="1" onkeypress='return event.charCode >= 48 && event.charCode <= 57' required @bind="@_pinFour" @oninput="Completion"/>

@code{
[Parameter]
public EventCallback<string> Completed { get; set; }

private string _pinOne;
private string _pinTwo;
private string _pinThree;
private string _pinFour;

private void Completion(ChangeEventArgs e)
{
_pinFour = e.Value.ToString();

Completed.InvokeAsync(_pinOne + _pinTwo + _pinThree + _pinFour);
}
}

然后我创建了另一个使用这些 PIN 输入组件中的 2 个的组件

<PinComponent Completed="@PinCompleted"></PinComponent>
<PinComponent Completed="@ConfirmationPinCompleted"></PinComponent>
@code {
private string _pin;
private string _confirmationPin;

private bool _valid = false;

private void PinCompleted(string pin)
{
_pin = pin;
}

private void ConfirmationPinCompleted(string pin)
{
_confirmationPin = pin;

if (_pin.Equals(_confirmationPin))
{
_valid = true;
}
}
}

是否可以使用 Blazor 的 ValidationMessage 来确保这两个组件共享相同的值?

最佳答案

将值和验证结果传递给您的 PinComponent 并使该组件显示验证错误。

<PinComponent Completed="@PinCompleted"></PinComponent>
<PinComponent Completed="@ConfirmationPinCompleted" ValidationMessage="@validationMessage"></PinComponent>

@code {
private string _pin;
private string _confirmationPin;

private bool _valid = false;

private string ValidationMessage => _valid ? string.Empty : "PIN does not match";

private void PinCompleted(string pin)
{
_pin = pin;
}

private void ConfirmationPinCompleted(string pin)
{
_confirmationPin = pin;

if (_pin.Equals(_confirmationPin))
{
_valid = true;
}
}
}

如果您想使用 Blazor Forms 验证

class PinModel
{
[Required]
public string Pin {get;set;}

[Required]
[PinTheSame]
public string PinConfirmation {get;set;}
}

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class PinTheSameAttirbute: ValidationAttribute
{

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null) return new ValidationResult("A pin is required.");

// Make sure you change PinModel to whatever the actual name is
if ((validationContext.ObjectType.Name != "PinModel")
return new ValidationResult("This attribute is being used incorrectly.");
if (((PinModel)validationContext.ObjectInstance).ConfirmPin != value.ToString())
return new ValidationResult("Pins must match.");

return ValidationResult.Success;
}

}

并将值作为模型传递

<EditForm Model="@Model">
<PinComponent Value="@Pin"></PinComponent>
<PinComponent Value="@ConfirmationPin"></PinComponent>
</EditForm>

最后一种方法尚未完全完成,但应该可以让您了解方向。

关于c# - 验证 2 个组件具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com