代码之家  ›  专栏  ›  技术社区  ›  John D

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

  •  0
  • John D  · 技术社区  · 3 年前

    我们的VS-2019解决方案适用于配置为 .Net核心5 .

    我很难在PWA应用程序代码中编码CRUD验证。

    VS-2019解决方案包含三个项目。 这个 数据库模型 类代码和自定义 验证属性 代码在 共享项目 . 这个 DB-API 接口和代码在 服务器项目 (对每个模型类使用“存储库”)。 这个 UI“CRUD”HTML @code 都在 客户项目 .

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

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

    所以问题是 ,如何从 服务器 从服务器调用时的代码 共享 确定“客户名称”是否唯一的代码?以下注入代码(在服务器项目中定义)始终为共享代码中的“CustomerService”变量返回NULL-- 从而阻止了从数据库获取数据的能力 .

    [Inject] public ICustomerService CustomerService { get; set; }

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

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

    我不知道“下一步该怎么办”。

    额外考虑 ...在客户端/UI中 提交 事件中,我已使用DB函数成功测试了unique 但是但是但是 ... 我不知道如何在验证摘要中显示错误消息。有什么想法吗?

    欢迎提出您的问题、意见和解决方案。

    0 回复  |  直到 3 年前
        1
  •  1
  •   Henk Holterman    3 年前

    [Inject] public ICustomerService CustomerService { get; set; }

    是Blazor语法,在服务器上不起作用。它被称为属性注入,只在组件(.razor或.razor.cs文件)中有效。

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

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

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


    更新:

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

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

    验证属性可以保留在共享项目中,但afaik[Unique]只有在生成数据库模式时才会生效。

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

    public class DataAccess : IDataAccess
    {
        public DataAccess(HttpClient http)
        {
            _http = http;
        }
    }