如何在DropDownListFor中的视图中显示NULL值

时间:2013-12-18 12:01:03

标签: c# asp.net-mvc-4 razor html.dropdownlistfor

我有以下DropDownListForShopId条目可以为空,我希望保持这种方式。此下拉列表按如下方式显示商店:

@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-statementstry-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时,代码可以正常工作......

1 个答案:

答案 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()