我创建了一个blazor组件库,以便能够从应用程序中调用组件,但消息验证没有显示。目前,验证是在InputText中完成的(它验证输入的格式或长度(,但没有显示组件的消息或样式。
组件库的代码:
自定义输入文本
<input value="@Value" @oninput="OnValueChanged" placeholder=@placeholderText class="form-control i-component o-my-4" />
<ValidationMessage For="@(() => model)" />
@code {
[Parameter]
public string placeholderText { get; set; }
[Parameter]
public object model { get; set; }
[Parameter]
public string Value { get; set; }
[Parameter]
public EventCallback<string> ValueChanged { get; set; }
private Task OnValueChanged(ChangeEventArgs e)
{
Value = e.Value.ToString();
return ValueChanged.InvokeAsync(Value);
}
}
我从nuget包中导入组件,以便能够在应用中使用它
应用程序代码:
<CustomInputText placeholderText="Place Holder Test" model="filterPayroll.IPF" @bind-Value="filterPayroll.IPF"/>
当我将ValidationMessage直接放在应用程序中时,它可以正常工作,但不能放在库中。对于这两种情况;filterPayroll";类是正确完成的,不同之处在于在一个类中显示了消息,而另一个没有。
您需要将验证摘要的For
作为表达式传递。
CustomInputText
需要看起来像这样:
<input value="@Value" @oninput="OnValueChanged" placeholder=@placeholderText class="form-control i-component o-my-4" />
<ValidationMessage For="@For" />
@code {
[Parameter]
public string placeholderText { get; set; }
[Parameter] public Expression<Func<string>>? For { get; set; }
[Parameter]
public string Value { get; set; }
[Parameter]
public EventCallback<string> ValueChanged { get; set; }
private Task OnValueChanged(ChangeEventArgs e)
{
Value = e.Value.ToString();
return ValueChanged.InvokeAsync(Value);
}
}
以及您的标记:
<CustomInputText @bind-Value="filterPayRoll.IDF" For="() => filterPayRoll.IDF" />