Что определяет ключ в ModelStateDictionary для элементов свойств коллекции - PullRequest
2 голосов
/ 21 марта 2011

Если это модель моего вида:

 public class ViewModel{
      public string SimpleProperty{get;set;}
      public SubViewModel ComplexProperty{ get;set;}
      public SubViewModel[] ComplexPropertyArray{ get; set; }
 }

 public class SubViewModel{
      public string NestedSimpleProperty{get;set;}
 }

Тогда какие будут сообщения об ошибках по умолчанию, назначенные для ModelStateDictionary для:

  1. ViewModel.SimpleProperty (см. Обновление ниже)
  2. ViewModel.ComplexProperty (см. Обновление ниже)
  3. ViewModel.ComplexProperty.NestedSimpleProperty (см. Обновление ниже)
  4. ViewModel.ComplexPropertyArray (см. обновление ниже)
  5. ViewModel.ComplexPropertyArray [0]
  6. ViewModel.ComplexPropertyArray [0] .NestedSimpleProperty

Обновление Я нашел это в отражателе:

protected internal static string CreateSubPropertyName(string prefix, string propertyName)
{
    if (string.IsNullOrEmpty(prefix))
    {
        return propertyName;
    }
    if (string.IsNullOrEmpty(propertyName))
    {
        return prefix;
    }
    return (prefix + "." + propertyName);
 }

Итак, я думаю, что это охватывает все, кроме # 5 и # 6

1 Ответ

2 голосов
/ 21 марта 2011

Если вы сделаете NestedSimpleProperty обязательным:

public class SubViewModel
{
    [Required]
    public string NestedSimpleProperty{ get; set; }
}

, а затем у вас будет форма, в которой у вас есть несколько текстовых полей для этого свойства, соответствующих каждому элементу в коллекции ComplexPropertyArray, то ключ, которыйбудет использоваться для сообщений об ошибках будет ComplexPropertyArray[i].NestedSimpleProperty, где i представляет индекс элемента в массиве, который содержит пустое значение.

...