Я отображаю записи с деталями в виде (используя asp.net mvc). Пользователь должен ввести серийные номера и опубликовать вид назад. Я хотел бы проверить, не совершил ли пользователь ошибку и все ли серийные номера уникальны в подробном списке. Если серийный номер был случайно введен дважды, я хотел бы указать пользователю точные поля, содержащие эти дубликаты серийного номера.
У меня есть эти классы (они более сложные):
public class Record
{
public long ID { get; set; }
public List<Detail> Details { get; set; }
}
public class Detail
{
public long ID { get; set; }
public string SerialNo { get; set; }
}
Я пытался использовать пользовательский атрибут проверки, но я никак не могу получить доступ ко всему списку из подробного представления, чтобы проверить, является ли это уникальный серийный номер.
Если я использую атрибут проверки для деталей внутри класса записи,
[SerialNoShouldBeUnique]
public List<Detail> Details { get; set; }
Я могу проверить факт и указать пользователю, что есть дубликаты, но я не могу точно пометить эти детали как ошибочные.
Я нашел где-то, чтобы проверить весь подробный список, перебрать элементы и добавить ошибки проверки, используя индексы Detail [i], но я отображаю детали в представлении, используя этот тип индексации элементов , поэтому я не могу легко получить доступ эти индексы.
Я мог бы проверить эти серийные номера в действии контроллера. Если я найду дубликаты, пройду через ModelState, найду эти ключи Details [aa ..- .. xx] .SerialNo и добавлю ошибку вручную. Но мне не нравится этот подход, и я бы хотел использовать валидацию (на стороне сервера).