Asp.net FirstOrDefault()i';我得到一个例外

Asp.net FirstOrDefault()i';我得到一个例外,asp.net,asp.net-mvc,exception,error-handling,argumentnullexception,Asp.net,Asp.net Mvc,Exception,Error Handling,Argumentnullexception,我遇到了一个异常,我不知道如何修复它。 我试过了DefaultIfEmpty,但仍然不起作用 代码如下: if (controller != "Home") { var defaultActionForController = ((List<DefaultActionForControllers>)ViewBag.DefaultActionsForControllers).Where(s => s.Controller == controller).

我遇到了一个异常,我不知道如何修复它。 我试过了DefaultIfEmpty,但仍然不起作用

代码如下:

if (controller != "Home")
{
    var defaultActionForController = ((List<DefaultActionForControllers>)ViewBag.DefaultActionsForControllers).Where(s => s.Controller == controller).Select(s => s.Action).FirstOrDefault();
    if (controller == "ManagementObjects")
    {
        var controllerName = firstLayerNameSet;
        @:> @Html.ActionLink(firstLayerNameSet, defaultActionForController, controller)
    }
    else if (controller == "MangementCategories")
    {
        var controllerName = secondLayerNameSet;
        @:> @Html.ActionLink(secondLayerNameSet, defaultActionForController, controller)
    }
    else if (controller == "View")
    {
        @:> @Html.ActionLink(Resources.ResourceManager.GetString(controller), "", "")
    }
    else
    {
        @:> @Html.ActionLink(Resources.ResourceManager.GetString(controller), defaultActionForController, controller)
    }
}
我将代码更改为此,但它不起作用,因为:

var defaultActionForController = ((List<DefaultActionForControllers>)ViewContext.Controller.ViewBag.DefaultActionForControllers).FirstOrDefault(s => s.Controller == controller).Action;

var defaultActionForController=((列表)ViewContext.Controller.ViewBag.DefaultActionForControllers).FirstOrDefault(s=>s.Controller==Controller).Action;
它仍然给了我一个例外。 当我去调试时,它说var defaultActionForController=null 在ViewBag.DefaultActions中,控制器计数为12


idk如果该信息有任何帮助,但我想发布它,你永远不知道。

错误堆栈会告诉你问题是什么:

ArgumentNullException
Value cannot be null.
Parameter name: source
   at System.Linq.Enumerable.Where[TSource](IEnumerable`1 source, Func`2 predicate)
   at ASP._Page_Views_Shared__LoginPartial_cshtml.Execute() in 
   d:\inetpub\wwwroot\TestMap\Views\Shared\_LoginPartial.cshtml:line 30
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
其中
是一种扩展方法。因此,它在源上运行,错误告诉您
source
参数为
null

检查填充
ViewBag.DefaultActions控件的代码
。在渲染视图之前,需要设置控制器动作的值

最后,您的方法调用可以简化为
FirstOrDefault
也允许使用谓词:

var defaultActionForController = ((List<DefaultActionForControllers>)ViewBag.DefaultActionsForControllers).FirstOrDefault(s => s.Controller == controller).Action;
var defaultActionForController=(列表)ViewBag.DefaultActionsForControllers.FirstOrDefault(s=>s.Controller==Controller.Action;

我怀疑这是FirstOrDefault,但更确切地说是FirstOrDefault。我猜是您的ViewBag.DefaultActions控件为nullHi,欢迎使用SO。请发布整个异常堆栈,而不仅仅是错误,这样我们就可以了解它的内容和位置,并帮助您。嗨!,我改变了方法,它仍然给我错误。另外,我发布了我的DefaultActionForController类。也许您可以在那里找到问题?@Daniel您没有正确设置控制器中的
ViewBag.DefaultActions控件
的值,或者您处理动态属性时存在区分大小写的问题。@Daniel请发布控制器的代码。加载此局部视图时正在执行的相关操作的代码。
ArgumentNullException
Value cannot be null.
Parameter name: source
   at System.Linq.Enumerable.Where[TSource](IEnumerable`1 source, Func`2 predicate)
   at ASP._Page_Views_Shared__LoginPartial_cshtml.Execute() in 
   d:\inetpub\wwwroot\TestMap\Views\Shared\_LoginPartial.cshtml:line 30
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
var defaultActionForController = ((List<DefaultActionForControllers>)ViewBag.DefaultActionsForControllers).FirstOrDefault(s => s.Controller == controller).Action;