Это означает, что ваш код использовал ссылочную переменную объекта, которая была установлена в нуль (т. е. она не ссылалась на экземпляр фактического объекта).
Чтобы предотвратить ошибку, объекты, которые могут быть пустыми, должны быть протестированы для null перед тем, как использовать.
if (myvar != null)
{
// Go ahead and use myvar
myvar.property = ...
}
else
{
// Whoops! myvar is null and cannot be used without first
// assigning it to an instance reference
// Attempting to use myvar here will result in NullReferenceException
}
Я обычно делаю это первым способом, которым вы описываете: перенаправление только в случае успешной подачи. Трудно увидеть реальный прецедент для закладки формы, содержащей недопустимые данные; с другой стороны, часто имеет смысл закладки закладки на страницу подтверждения (после успешной отправки).
Как и другие ответы, используйте только шаблон Post / Redirect / Get при успешной проверке на стороне сервера. Если форма недействительна, просто ответьте на ответ напрямую, с сообщениями об ошибках.
Для удобства использования вы должны убедиться, что проверка на стороне клиента отличная, это хорошая идея любым способом, поскольку пользователям нравится немедленная обратная связь. Используйте Javascript или новые функции формы HTML5 , такие как атрибут required
или атрибут maxlength
или type="email"
и т. Д.
Конечно, вы все равно должны иметь проверку на стороне сервера для обеспечения безопасности и для грамотного деградации.
Если URL-адрес, используемый для заполнения формы, является формой POST-сообщений формы, я не думаю, что есть проблема. Если вход действителен, переадресация и GET. Если это недействительно, повторно заполните заполненную форму. Таким образом, взаимодействие выглядит так:
GET /your-url => blank form
POST /your-url (success) => Redirect => GET /success-url
POST /your-url (failure) => filled-in form
Если вы используете ASP.NET MVC, тогда есть другой метод, который можно использовать для ситуации Post -> failure. .
Если вы реализуете этот метод, вы можете всегда ] перенаправлять после публикации, даже если сообщение вызвало сбой.
Упомянутая проблема закладки-закладки влияет на оба подхода, вы не можете пометить что-то, что полагается на некоторые временные данные, сохраненные на сервере.
И двойное представление не является проблемой, если вы гарантируете, что если проверка не выполняется, вы не сохраняете никаких данных (т. е. каждая подача с неудачными данными является идемпотентным запросом).
Так что PRG только на успех - очень чистый подход.