我在验证Blazor WASM客户端应用程序时遇到了问题。
将InputText元素封装到组件以进行紧凑布局时,将不再执行可正确执行的验证。
使用类似的模型
public class Customer {
[Required]
[StringLength(100)
public string customerName {get; set;} = "";
}以一种
<EditForm Model=@customer>
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-row">
<div class="form-group mb-0 col-sm-12">
<div class="input-group input-group-sm mb-1 mt-1">
<div class="input-group-prepend">
<span class="input-group-text" style="width:6em;">Firma</span>
</div>
<InputText type="text" class="form-control" @bind-Value=customer.customerName />
</div>
</div>
</EditForm>验证工作正常!
但是为了模块化,我把内部的东西外包给了一个单独的组件
@page "/inputGroup"
<div class="input-group input-group-sm mb-1 mt-1">
<div class="input-group-prepend">
<span class="input-group-text" style="width:6em;">@label</span>
</div>
<InputText type=@type class="form-control" @bind-Value=@data @oninput=@onChange />
</div>
@code {
[Parameter]
public string label {get; set;} = "Label:";
[Parameter]
public string type {get; set;} = "text";
[Parameter]
public string data {get; set;} = "";
[Parameter]
public EventCallback<string> dataChanged {get; set;}
private Task onChange(ChangeEventArgs e) {
data = (string)e.Value;
return dataChanged.InvokeAsync(data);
}
}然后我把这个放到我的表格上,就像
...
<div class="form-row">
<div class="form-group mb-0 col-sm-12">
<InputGroup label="Firma:" @bind-data=customer.customerName />
</div>
</div>
...验证不起作用!?
发布于 2021-02-23 08:50:09
您可以这样做,您可以子类化InputText
InputTextGroup.razor
@inherits Microsoft.AspNetCore.Components.Forms.InputText
<div class="mt-1">
<input type="text" id="@Id"
@attributes="@AdditionalAttributes" @bind="@CurrentValueAsString"
class="@CssClass myOtherCssClasses" />
</div>
@if (ValidationFor != null)
{
<div class="myValidationClass">
<ValidationMessage For="ValidationFor" />
</div>
}和InputTextGroup.razor.cs
public partial class InputTextGroup
{
[Parameter] public string Id { get; set; } = HeadlessUI.HtmlElement.GenerateId();
[Parameter] public string? Label { get; set; }
[Parameter] public Expression<Func<string>>? ValidationFor { get; set; }
}我从这个SO answer和这个Microsoft docs中获得了灵感
https://stackoverflow.com/questions/62322383
复制相似问题