Сохранение значения дочернего объекта через родительский просмотр бритвы? - PullRequest
1 голос
/ 24 октября 2011

привет, как я могу получить дочерние (содержащиеся) значения для правильного сохранения в редактируемом представлении родителя? Значение отображается правильно, но не сохранится?

    @model MVC3.Models.A

    @Html.EditorFor(model => model.Bs.First().Val)

    public  class A
    {
        public int Name { get; set; }
        public virtual ICollection<B> Bs { get; set; }
    }

    public  class B
    {
        public int Val { get; set; }
        public virtual A A { get; set; }
    }

1 Ответ

1 голос
/ 24 октября 2011

Прямым ответом будет обращение к дочернему объекту с использованием нотации массива (конечно, если предположить, что Children - это нечто, реализующее IList):

@Html.EditorFor(model => model.Children[0].Val)

Если вы намереваетесь предоставить редакторы длявсе Children, хотя было бы лучше определить шаблон редактора для этого типа и использовать @Html.EditorFor(model => model.Children) вместо отображения редакторов для каждого элемента в коллекции с помощью цикла.

Редактировать: Исправлено ICollection вместо IList ошибка.

Обновление:

Если ваша коллекция реализует только ICollection (и, следовательно, не индексируется),тогда вам следует рассмотреть возможность использования ViewModel (отображая IList) вместо модели, которую вы используете в настоящее время, чтобы сделать вышеприведенное действительным.

Если это не вариант, то вы можете рассмотреть этот хак:

// essentially creating the correct name manually
@Html.TextBox(Html.NameFor(m => m.Children) + "[0].Val",
              model.Children.First().Val)

Конечно, вы теряете поддержку автоматического использования любого имеющегося у вас шаблона редактора, но это не может быть проблемой в вашем случае (особенно учитывая, что Val звучит как простой тип).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...