blazor - 具有 Blazor 表单验证的条件类
问题描述
我现在正在试用 Blazor,我选择的 CSS 框架是 Tailwind。现在,构建和集成 Tailwind 很容易,但我正在努力寻找有关如何根据输入验证状态有条件地应用类的资源。Blazor 本身添加了一个invalid
类,但这显然不适用于 Tailwind 使用的样式方法。基本上我有这个代码:
<div class="mt-1">
<InputText @bind-Value="LoginRequest.UserName" id="userName" type="text" required
class="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"/>
<ValidationMessage For="@(() => LoginRequest.UserName)"/>
</div>
border-gray-300
...并希望有条件地更改,例如border-red-300
如果字段验证失败。
这可能吗?如果是的话,我会喜欢一些指针。
干杯
解决方案
新的 .NET 5 版本似乎可以做到这一点:
<EditForm EditContext="@_loginContext">
... body ...
</EditForm>
@code{
static UserLoginRequest LoginRequest { get; set; } = new();
readonly EditContext _loginContext = new(LoginRequest);
protected override void OnInitialized()
{
base.OnInitialized();
_loginContext.SetFieldCssClassProvider(new TailwindClassProvider());
}
private class TailwindClassProvider : FieldCssClassProvider
{
public override string GetFieldCssClass(EditContext editContext, in FieldIdentifier fieldIdentifier)
{
var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any();
return isValid ? "border-gray-300 placeholder-gray-400 focus:ring-indigo-500 focus:border-indigo-500" : "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500";
}
}
}
推荐阅读
- vue.js - 如何配置我的 Nuxt 前端应用程序以了解使用 Strapi 的后端的 baseUrl?
- java - 你如何在 IntelliJ 上运行 devtools?
- google-apps-script - 谷歌表格自动添加额外的行
- flutter - 2048flutter游戏android和ios滚动差异
- pytorch - ModuleNotFoundError:没有名为“torchvision.models.video”的模块
- javascript - Firebase Dialogflow Fulfillment - 导致“错误:没有为平台定义响应:”的承诺
- javascript - 如何在 JavaScript 中引用原始类型?
- android - 仅允许经过身份验证的用户在 Android 中使用 Firebase 身份验证访问任何活动
- owl - Protege:匿名类包含所有不参与关系的类
- java - Java 继承:在显式调用构造函数时无法引用实例字段