Код: Выделить всё
[Keyless]
public class Specs
{
[Column("id")]
public string? ID { get; set; }
[Column("name")]
public string? Name { get; set; }
[Column("value")]
public string? Value { get; set; }
[Column("rank")]
public int Rank { get; set; }
}
< /code>
[h4] держатель модели данных класса данных держателя модели, модифицированных пользователем < /h4>
public class SpecsEntryHolder(string? id, string? n, string? val, int rank)
{
public string? ID { get; set; } = id;
public string? Name { get; set; } = n;
public string? Value { get; set; } = val;
public int Rank { get; set; } = rank;
}
< /code>
переопределить эти модели класса данных в виде списка < /h4>
public List SpecsList { get; set; } = [];
public List SpecsEntryHolderList { get; set; } = [];
< /code>
Я клонировал данные с помощью этого подхода: < /p>
// SpecsList has already been fed with the database records.
SpecsEntryHolderList = SpecsList.Select(v => new SpecsEntryHolder(v.ID, v.Name, v.Value, v.Rank)).ToList();
< /code>
На странице UI Razor: < /p>
@foreach (var specs in SpecsEntryHolderList)
{
@($"{specs.Name}")
}
Я надеялся, что это будет работать, но это не так:
[/h4]
Код: Выделить всё
private void FormatOnBlurSpecs(FocusEventArgs e)
{
foreach (var spec in SpecsEntryHolderList)
{
var fieldIdentifier = new FieldIdentifier(spec, nameof(spec.Value));
if (string.IsNullOrWhiteSpace(spec.Value))
{
messageStore!.Add(fieldIdentifier, $"{spec.Name} is required.");
editContext!.NotifyValidationStateChanged();
}
messageStore?.Clear(fieldIdentifier);
editContext!.NotifyValidationStateChanged();
}
}
< /code>
[h4] версия 2 < /h4>
private void FormatOnBlurSpecs(FocusEventArgs e)
{
foreach (var spec in SpecsEntryHolderList)
{
var fieldIdentifier = new FieldIdentifier(spec, nameof(spec.Value));
if (string.IsNullOrWhiteSpace(spec.Value))
{
messageStore!.Add(fieldIdentifier, $"{spec.Name} is required.");
editContext!.NotifyValidationStateChanged();
}
messageStore?.Clear(fieldIdentifier);
editContext!.NotifyValidationStateChanged();
}
}
Эта процедура тестирования состоит в том, чтобы убедиться, что поля, сгенерированные Foreach , правильно подтверждены, чтобы увидеть, являются ли они пустыми или нет. Он также правильно проверяет определенное поле, чтобы увидеть, пустого ли оно. Обратите внимание, что это не ограничивается string.isnullorwhitespace (specs.value) .
Код: Выделить всё
private void FormatOnBlurSpecs(FocusEventArgs e)
{
foreach (var specs in SpecsEntryHolderList)
{
if (string.IsNullOrWhiteSpace(specs.Value))
{
Console.WriteLine($"Spec {specs.Name} (ID={specs.ID}) is empty!");
}
else
{
Console.WriteLine($"Spec {specs.Value} (ID={specs.ID})");
}
}
}
< /code>
В приведенном выше примере я предоставил минимальную настройку для упрощения процесса. Однако в реальном приложении вы должны обрабатывать проверку сообщений для каждого текстового поля, так как они, скорее всего, не будут одинаковыми. Например, каждое поле имеет свою собственную конкретную проверку, которая уникальна из других областей. Тем не менее, сложная часть состоит в том, что поле генерируется циклом Foreach Вот мой дополнительный вопрос, помимо заголовка для этого контекста: < /p>
- есть обходной завод для этого подхода? Если так, как это может быть реализовано правильно?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-through
Мобильная версия