在 Blazor PWA VS-2019 解决方案中显示验证错误的问题

Posted

技术标签:

【中文标题】在 Blazor PWA VS-2019 解决方案中显示验证错误的问题【英文标题】:Issues showing validation errors with in Blazor PWA VS-2019 solution 【发布时间】:2021-12-06 10:12:58 【问题描述】:

我们的 VS-2019 解决方案适用于为 .Net CORE-5 配置的 PWA 模板。

我在 PWA 应用程序代码中为 CRUD 验证编码时遇到了困难。

VS-2019 解决方案包含三个项目。 DB-model 类代码和自定义 ValidationAttribute 代码在 SHARED 项目 中。 DB-API 接口和代码在SERVER 项目 中定义(对每个模型类使用“存储库”)。 UI "CRUD" HTML@code 位于 CLIENT 项目中。

我们对模型类和字段中的每个 CRUD 字段酌情使用 DataAnnotation 和自定义 ValidationAttribute(s)。

我们要求在添加或编辑“客户”记录时,“客户名称”必须与所有其他“客户”不同。 我们有一个自定义 ValidationAttribute,它在验证期间被调用,当“CustomerName”不唯一时,它应该出现在 UI 中。 测试其他重复“客户名称”的算法相当简单,但它需要从所有其他“客户”中获取“客户名称”列表。

所以问题是,当从 SERVER 代码调用时,如何从 SERVER 代码中获取“客户名称”列表strong>SHARED 代码来确定“客户名称”是否唯一?以下 INJECT 代码(在 SERVER 项目中定义)始终为 SHARED 代码中的“CustomerService”变量返回 NULL -- 从而阻止了从数据库获取数据的能力

[Inject] public ICustomerService CustomerService get; set;

我们在 VS 解决方案中有以下项目依赖项:

客户依赖于共享。 服务器依赖于共享和客户端。 SHARED 没有依赖关系 -- 因为 -- VS 抱怨循环依赖关系。

我不知道“下一步该做什么”。

额外考虑...在 CLIENT/UI OnSubmit 事件中,我已经成功地使用 DB 函数测试了唯一性 BUT BUT BUT ...我不知道如何使 ErrorMessage 出现在验证摘要中。有什么想法吗?

欢迎您提出问题、cmets 和解决方案。

【问题讨论】:

【参考方案1】:

[Inject] public ICustomerService CustomerService get; set;

是 Blazor 语法,它在服务器上不起作用。它称为属性注入,仅适用于组件(.razor 或 .razor.cs 文件)。

使用构造函数注入并确保服务已在服务器启动类中注册。

从共享代码调用时,如何从服务器代码中获取“客户名称”列表

你不能。您列出的依赖项是正确的,共享项目无权访问服务器。 必须在服务器上进行唯一验证。


更新:

您不必“获取列表”来验证唯一性。基础是在您的存储库或数据层上调用像 Task<bool> AnyAsync(...) 这样的方法。

当您希望在客户端上进行此验证时,您必须为其创建一个 API 端点。

Validation 属性可以保留在 Shared 项目中,但 afaik [Unique] 只会在您生成 Database 架构时生效。

构造函数注入(服务器或客户端)看起来像

public class DataAccess : IDataAccess

    public DataAccess(HttpClient http)
    
        _http = http;
    

【讨论】:

谢谢 Henk... 你帮了我很大的忙。所以现在我真的被困住了。我可以问“如何”使用 Blazor 为这个服务器验证编写代码吗?我是否从模型字段中删除自定义 ValidationAttribute?我应该在组件的代码中提供哪些代码以允许在服务器上进行服务器验证?希望您可以通过 (a) 解决方案链接或 (b) 一些带有代码“位置”的 code-sn-ps (html/@code/SHARED/SERVER/STARTUP.cs...其他)。提前谢谢你。 @Henk...您能否解释一下您的评论:“使用构造函数注入...”。我对 Startup.cs 和服务注册知之甚少。谢谢。约翰

以上是关于在 Blazor PWA VS-2019 解决方案中显示验证错误的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 VS2019 中运行的 Blazor 可以调试但不能发布

Blazor PWA 适用于桌面浏览器,但不适用于智能手机

Blazor webassembly pwa 会话存储在部署到 Azure 后不持久

如何更改刷新 Blazor PWA 应用程序时出现的“正在授权...”消息?

在哪里可以找到有关如何将 Blazor 应用部署到在 Windows Server 2019 上运行的 IIS10 的具体详细信息

ServiceStack:添加 Blazor 支持?