我有以下DropDownListFor
。 ShopId
条目可以为空,我希望保持这种方式。此下拉列表按如下方式显示商店:
@Html.DropDownListFor(m => weekDay.Shop.ShopId,
new SelectList(Model.ShopItems,
"ShopId",
"Name",
weekDay.Shop.ShopId),
""
)
现在我希望应用程序在值为System.NullReferenceException: Object reference not set to an instance of an object
时不提供NULL
- 错误。我尝试过使用if-statements
和try-catches
。除了丑陋之外他们也不行。
当数据库中的值为NULL
时,有没有人知道如何显示默认的空字符串?
/以另一种方式编辑同一个问题。控制器如下所示:
var viewModel = new ShopWeekDayViewModel
{
ShopItems = db.Shops.ToList(),
WeekDays = db.WeekDays.ToList()
};
如何过滤ShopItems
中的空值并将其更改为空字符串?
/编辑2
数据库中的值如下所示:
WeekDayId ShopId Day 1 NULL Zondag 2 1 Maandag 3 1 Dinsdag 4 1 Woensdag 5 1 Donderdag 6 2 Vrijdag 7 NULL Zaterdag
当我将NULL值更改为1或2时,代码可以正常工作......
答案 0 :(得分:1)
我真的不明白你为什么要为下拉列表显示无效选项。如果它不是有效选项,为什么允许用户选择它?只需完全过滤掉null
值:
ShopItems = db.Shops.Where(s => s.ShopId != null).ToList()
话虽如此,如果你已经死定,你可以尝试以下方法:
ShopItems = db.Shops.Select(s => new Shop {
ShopId = s.ShopId,
Day = s.ShopId != null ? s.Day : "Your default value"
}).ToList()
但是,如果您使用的是LINQ to Entities,则会产生以下异常:
实体或复杂类型Shop不能在LINQ to Entities查询中构建
我不确定LINQ to SQL是否也会出现这种情况,但你可以通过首先投射到匿名类型然后投射到Shop
来解决这个问题:
ShopItems = db.Shops.Select(s => new {
ShopId = s.ShopId,
Day = s.ShopId != null ? s.Day : "Your default value"
}).Select(anon => new Shop {
ShopId = anon.ShopId,
Day = anon.Day
}).ToList()