Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Вы можете использовать javascript для динамического создания индексированных входов для post back. В качестве примера создайте фиктивный набор входов, которые клонируются и отображаются, когда вы нажимаете кнопку «добавить домашнее животное» (предполагается, что свойства Pet отображаются в таблице с id = «Pets»)
<div id="NewPet" style="display:none">
<tr>
<td><input type="text" name="Pets[#].Type value /></td>
<td><input type="text" name="Pets[#].Breed value /></td>
<td>.....</td> // more properties of Pet
<td><input type="hidden" name="Pets[#].Index" value ="%"/></td>
</tr>
</div>
Примечание. использование указателя-указателя, чтобы предотвратить его отправку назад
И скрипт
$('#AddButton').click(function() {
var index = (new Date()).getTime();
var clone = $('#NewPet').clone();
// Update the index of the clone
clone.html($(clone).html().replace(/\[#\]/g, '[' + index + ']'));
clone.html($(clone).html().replace(/"%"/g, '"' + index + '"'));
$('#Pets tbody').append(clone.html());
}
DefaultModelBinder
требует, чтобы индексы начинались и нули и были последовательными. ДобавлениеPets[#].Index
(это может быть простоPets.Index
) позволяет использоватьModelBinder
не последовательные индексы (на самом деле индексаторы могут быть"ABC", "XYZ"
вместо0, 1, 2
). Пока значениеIndex
соответствует индексу индекса свойств (бит между квадратными скобками), тогда коллекция будет успешно отправлена. Индекс не является свойством вашей модели (и не должен быть). Это просто свойство, используемое внутриModelBinder
. – Stephen Muecke 25 October 2014 в 01:19$('...').append(clone.html());
Я предполагаю, что OP выбрал это. Обратите внимание также, если вы также захотите удалить, тогда установкаvar index
на количество существующих элементов не будет работать (вы можете получить идентичные индексы), чтобы вы могли использоватьvar index = (new Date()).getTime();
, поэтому индексом всегда является уникальное значение. – Stephen Muecke 25 October 2014 в 01:48