问题描述
我有一个 IEnumerable<SelectListItem> Runs
,但它在我的视野中抛出了 Sequence contains no elements
。
我添加了一个 DefautIfEmpty()
来防止这种情况:
var defaultListItemRow = table.NewRow();
defaultListItemRow["description"] = "Er zijn geen runs beschikbaar om te kiezen";
defaultListItemRow["runguid"] = Guid.Empty;
model.Runs =
from row in table.AsEnumerable().DefaultIfEmpty(defaultListItemRow)
select new SelectListItem
{
Selected = false,Text = row["description"].ToString(),Value = row["runguid"].ToString()
};
在视图中,我使用 HTMLHelper 创建自定义下拉列表:
@Html.FabricDropDownListFor(model => model.Runs,Model.Runs,htmlAttributes: new { @class = "ms-Dropdown-select",@style = "width: 100px;" },label: "Billing-run",choosetext: "Selecteer een run...")
这包含一个非空的 MvcHtmlString 并包含默认项。
就像您在打印屏幕中看到的那样,Model.Runs.Max()
返回一个符合预期的 SelectListItem。
但它仍然抛出 Sequence contains no elements
和以下堆栈跟踪:
at System.Linq.Enumerable.Max[TSource](IEnumerable`1 source)
at System.Linq.Enumerable.Max[TSource,TResult](IEnumerable`1 source,Func`2 selector)
at ASP._Page_Views_Cloudbilling_VPS_Overzicht_cshtml.Execute() in D:\home\site\wwwroot\Views\Cloudbilling\VPS_Overzicht.cshtml:line 21
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext,Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext,TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters,Int32 filterIndex,ResultExecutingContext preContext,ControllerContext controllerContext,ActionResult actionResult)
我没有想法,谁有想法?
解决方法
在带有 Max
异常的视图中,您使用的是不同的模型属性:
Model.CustomerRuns
默认回退项应用于 Model.Runs
属性。
除此之外,Max
会选择您未在默认项中初始化的 RunDate
。