RedirectToAction для определенного действия GET приводит к исключению нулевого указателя, только если эта проблема существует - PullRequest
0 голосов
/ 23 сентября 2019

У меня на сайте есть логический поток, который не работает из-за Nullpointerexception, как только я пытаюсь получить доступ к определенному действию GET.

У меня есть несколько очень похожих тел кода в других действиях GET, и это единственное действие GET, которое вызывает эту проблему.Весь код написан на C # , а сайт построен на .NET Framework 4.5.2

. Я написал новую операцию для нашего сайта.Рабочий процесс выглядит следующим образом:

  1. Используя действие с именем AdminEmailCompose, соберите тему письма и основной текст, сохраните текст в переменных сеанса (да, ленивый) и используйте RedirectToAction, чтобы перейти к...

  2. AdminEmailSendOptions.Этот код позволяет пользователю указать, кто должен получать электронную почту (все пользователи, пользователи из меню).Используйте ReDirectToAction, чтобы перейти к ...

  3. AdminEmailUserMenu, который должен отображать список пользователей в качестве возможных целей для электронной почты.Действие GET для AdminEmailUserMenu аварийно завершает работу с вышеупомянутым исключением нулевого указателя.

Я попытался разбить этот случай на более простой вариант использования, и мне это удалось.См. Приведенный ниже код.

Исходная ссылка:

<div>
    <li>@Html.ActionLink("Send Email",AdminEmailUserMenu", "Admin")</li>
</div>

GET-код для AdminEmailUserMenu:

//
// GET: /Admin/AdminEmailUserMenu
[AllowAnonymous]
public ActionResult AdminEmailUserMenu()
{

    if (Session["uID"] == null || (int)Session["uID"] <= 0)
    {
        return RedirectToAction("Login", "Account", new { returnUrl = "" });
    }

    AdminEmailUserMenuViewModel model = new AdminEmailUserMenuViewModel();

    List<FTFFLibrary.FTFFUser> userdatalist = new List<FTFFLibrary.FTFFUser>();
    userdatalist.Clear();
    int userdatalistcount = 0;

    userdatalist = FTFFLibrary.FTFFFunctions.FTFFUserGetAll();
    userdatalistcount = userdatalist.Count;
    model.UseridListCount = userdatalistcount;

    if (userdatalistcount > 0)
    {
        for (int jj = 0; jj < userdatalistcount; jj++)
        {
            if (userdatalist[jj].buserisConfirmed)
            {
                model.UseridList.Add(userdatalist[jj].userID);
                model.DisplayNameList.Add(userdatalist[jj].userDisplayName);
            }
            model.UseridListCount = model.UseridList.Count();
        }
    }
    return View(model);
}

Действие GET никогда не выходит за первую строку исполняемого файла.code.

Вот трассировка стека:

Строка 1228: {Строка 1229: Строка 1230: if (Session ["uID"] == null || (int) Session ["uID"] <= 0) Строка 1231: {Строка 1232: return RedirectToAction (" Вход в систему "," Учетная запись ", new {returnUrl =" "}); </p>

[NullReferenceException: ссылка на объект не установлена ​​для экземпляраобъект.] FTFFWebsite.Controllers.AdminController.AdminEmailUserMenu () в C: \ Users \ Владелец \ source \ repos \ FTFFWebsite \ FTFFWebsite \ Controllers \ AdminController.cs: 1230 lambda_method (Закрытие, ControllerBase, Объект []) +62 Система.Web.Mvc.ActionMethodDispatcher.Execute (контроллер ControllerBase, параметры Object []) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute (параметры ControllerContext controllerContext, IDictionary 2 parameters) +157 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 параметра) +27 System.Web.Mvc.Async.AsyncControllerInInb__39 (IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 System.Web.Mvc.Async.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod.ync.Async.AsyncInvocationWithFilters.b__3d () +50 System.Web.Mvc.Async. <> C__DisplayClass46.b__3f () +228 System.Web.Mvc.Async. <> C__DisplayClass33.b__32 (IAsyncResult asyncveb)).Async.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters (IAsyncResult asyncResult) +34 System.Web.Mvc.Asynb. <.Web.Mvc.Async. <> C__DisplayClass21.b__1e (IAsyncResult asyncResult) +100 System.Web.Mvc.Async.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () +49 System.Web.Mvc.Async.AsyncControllerActionInscult ()) +27 System.Web.Mvc.Controller.b__1d (IAsyncResult asyncResult, ExecuteCoreState innerState) +13 System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () +49 System.Web.Mvc.Controller.EndExecuteCore (IAsyncResult asyncResult) +36 System.Web.Mvc.Controller.b__15 (IAsyncResult asyncResult, контроллер контроллера) +12 System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +22 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () +49 System.Web.Mvc.Controller.EndExecute (IAsyncResult asyncResult) +26 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecuntyns + + IAync ()10 System.Web.Mvc.MvcHandler.b__5 (IAsyncResult asyncResult, ProcessRequestState innerState) +21 System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End () +49 System.Web.Mvc.MvcHandler.EultyncRequestRecult) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (результат IAsyncResult) +9System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +9873649 System.Web.HttpApplication.ExecuteStepImpl (шаг IExecutionStep) +48 System.Web.HttpApplication.*

...