#c# #asp.net #asp.net-mvc-3
#c# #asp.net #asp.net-mvc-3
Вопрос:
У меня есть простой класс, который включает в себя 2 свойства, одну строку и один список универсальных объектов. Это выглядит следующим образом:
public class SessionFieldViewModel
{
private String _name;
public String Name
{
get { return _name; }
set { _name = value; }
}
private List<Object> _value;
public List<Object> Value
{
get { return _value ?? new List<Object>(); }
set { _value = value; }
}
}
В моем основном коде (контроллер MVC) Я пытаюсь вручную заполнить этот класс. Имейте в виду, что когда я передаю данные из веб-формы в этот класс, используя привязку модели по умолчанию, это заполняется просто отлично.
При попытке вручную создать запись и добавить ее в список я делаю это:
Guid id = Guid.NewGuid();
var _searchField = new SessionFieldViewModel();
_searchField.Name = "IDGUID";
Object _object = (Object)id;
_searchField.Value.Add(_object);
_searchFields.Fields.Add(_searchField);
Когда я делаю это, я получаю заполненный класс со свойством Name «IDGUID», но общие списки объектов возвращаются нулевыми.
Хотя, когда я отлаживаю код и просматриваю его, кажется, что все данные там и работают так, как я это делаю, но когда я заканчиваю и проверяю _searchFields, он ничего не показывает в свойстве Value полей.
Идеи?
Заранее спасибо.
Том тлатурелле
Комментарии:
1. Где общий список становится нулевым? Привязка модели используется для привязки значений, поступающих из HTTP-запроса. Как выглядит ваше представление? Как насчет действия POST? Почему вы используете
List<object>
? Зачем нужны универсальные объекты, если вы не знаете тип во время компиляции? Кажется отчасти бесполезным.
Ответ №1:
Похоже, вы никогда не устанавливаете _value
, когда оно равно null из средства получения. Попробуйте
public List<Object> Value
{
get { return _value ?? (_value = new List<Object>()); }
set { _value = value; }
}
Комментарии:
1. Хороший улов. Я этого не видел. Кроме того, поскольку этот код также работает через привязку модели по умолчанию и возвращает фактические значения в другом варианте использования, я не думал, что эта часть будет нарушена.
Ответ №2:
_value
никогда не устанавливается в экземпляр List<Object>
; это всегда null. Что происходит, так это то, что вы возвращаете новый List<Object>
и добавляете к нему Object
, но вы немедленно отбрасываете вновь созданный List<Object>
.
Вам нужно изменить ваше определение Value
на что-то вроде этого:
private List<Object> _value = new List<Object>();
public List<Object> Value
{
get { return _value; }
set { _value = value; }
}