Проверка данных представления перед их установкой в ​​модель - PullRequest
0 голосов
/ 27 мая 2020

Мой объект модели внешне довольно прост, я не думаю, что его стоит описывать мою модель, но хорошей аналогией была бы строка подключения SQL, это просто строка, но правила ее создания довольно сложны, требуя количество условных элементов пользовательского интерфейса в зависимости от БД и других параметров.

Некоторые данные, которые у меня есть в представлении, не могут быть записаны обратно в Модель, если они недействительны (представьте, что имя базы данных заключено в кавычки строка, если пользователь вводит символ кавычки, он не может быть записан в строку подключения, не сделав строку подключения нечитаемой).

API проверки блазора требует, чтобы объект модели работал, так как создать валидатор для моего элемента управления Blazor, который сообщает об ошибках в недопустимых полях view . В этом случае модель представляет собой просто строковое поле ConnectionString, и хотя я мог бы написать для этого специальный валидатор, данные в нем могут не представлять данные в представлении, поскольку представление не всегда может быть записано в модель.

ОБНОВЛЕНО кодом

В следующем коде показана концепция. Я не могу найти способ, чтобы правила проверки в ConnectionStringViewModel выполнялись в DatabaseInfoEditor.

class DatabaseInfoModel
{
    [MaxLength(10)]
    public string Name {get;set;}
    [ValidateComplexType] // used to cause validation of child objects - but there is no child object to validate, what we want to validate is the ConnectionStringViewModel
    public string ConnectionString {get;set;}
}

DatabaseInfoEditor.razor

<EditForm Model="MyDatabaseInfoModel">
   <ObjectGraphDataAnnotationsValidator />
    Name:<TextEditor @bind-Text="MyDatabaseInfoModel.Name"/>
    <ConnectionStringEditor ConnectionString="MyDatabaseInfoModel.ConnectionString "/>
</EditForm>

ConnectionStringEditor.razor

Database:<TextEditor @bind-Text="MyConnectionStringViewModel.Database"/>
Username:<TextEditor @bind-Text="MyConnectionStringViewModel.Username"/>

@code
{
    [Parameter]
    public string ConnectionString {get;set;}

    ConnectionStringViewModel MyConnectionStringViewModel;

    override OnParameterSet()
    {
        base.OnParameterSet();
        MyConnectionStringViewModel = PickApartConnectionString(ConnectionString);
    }

    class ConnectionStringViewModel
    {
        [MaxLength(10)]
        public string Database {get;set;}
        [MaxLength(10)]
        public string Username {get;set;}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...