Я нахожусь в конце моего остроумия здесь.Я продолжаю получать NullReferenceException в следующей строке кода:
ViewBag.PaypalError = "we were unable to retreive your cart.";
Я знаю, что это та строка - я добавил некоторый код в другом месте файла, который заставил его получить новый номер строки, и номер строки вмоя ошибка изменилась, чтобы следовать за ним.Я знаю, что ViewBag не является нулевым, потому что я специально вставил тест if (ViewBag == null)
перед ним.
Чтобы сделать вещи более странными, у меня есть код для отправки электронного письма, когда выполнение входит в логику, которая приводит к приведенному выше утверждению.Это электронное письмо никогда не устанавливается, но эта строка кода, которая происходит потом, выдает исключение, и я получаю электронное письмо из блока try / catch, который его перехватывает.
Я знаю, что, вероятно, мне следует просто отказаться от ViewBag,и у меня есть некоторые идеи по рефакторингу кода, чтобы он здесь не нужен, но ничего из этого не говорит мне, откуда это исключение.
Есть идеи?Тесты попробовать?
Редактировать: Вот остальная часть кода.Это определенно не тот код, которым я горжусь, но он должен работать ...
public ActionResult PaypalConfirmation(string token, string payerID)
{
try
{
Cart cart = GetCurrentCart();
if (cart == null)
{
// I never get this email.
SendEmail("Paypal confirmation with null cart", "Token: " + token + ".<br><br>", requestData: Request);
if (token != null && token != "")
{
var tempCart = Cart.GetByAlternateOrderNumber(token);
if (tempCart != null)
{
cart = tempCart;
}
else
{
ViewBag.PaypalError = "we were unable to retreive your cart.";
return View("~/Views/Error/PayPal.cshtml");
}
}
else
{
if (ViewBag == null)
{
SendEmail("VIEWBAG WAS NULL", "Token: " + token + ".<br><br>", requestData: Request);
return View("~/Views/Error/PayPal.cshtml");
}
else
{
// Line which errors
ViewBag.PaypalError = "we were unable to retreive your cart.";
return View("~/Views/Error/PayPal.cshtml");
}
}
}
// More execution code here, including the "Everything worked" return.
}
catch (Exception ex)
{
try
{
var isNull = "";
if (ViewBag == null) isNull = "ViewBag was null!<br><br>";
SendEmail("Crash in Paypal Payment", isNull + ex.ToString(), requestData: Request);
return View("~/Views/Error/PayPal.cshtml");
}
catch (Exception ex2)
{
SendEmail("Crash in reporting Paypal Crash!", ex.ToString() + "<br><br>---------------------<br><br>" + ex2.ToString());
return View("~/Views/Error/PayPal.cshtml");
}
}
}
Электронная почта из блока catch:
System.NullReferenceException: Objectссылка не установлена на экземпляр объекта.в Website.Controllers.CartController.PaypalConfirmation (String token, String payerID) в C: ############# \ Website \ Controllers \ CartController.cs: строка 137
Отметка времени:06.03.2012 10:43:13
IP: #############
Запрошенный URL: / Cart / PaypalConfirmation? Token = EC-10L01937X56050826 & PayerID = ############
Пользовательский агент: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10.6; rv: 10.0.2) Gecko / 20100101 Firefox / 10.0.2