C# 如何在DropDownListFor的视图中显示空值

C# 如何在DropDownListFor的视图中显示空值,c#,asp.net-mvc-4,razor,html.dropdownlistfor,C#,Asp.net Mvc 4,Razor,Html.dropdownlistfor,我有以下DropDownListFor。ShopId条目可以为空,我希望保持这种状态。此下拉列表显示商店,如下所示: @Html.DropDownListFor(m => weekDay.Shop.ShopId, new SelectList(Model.ShopItems, "ShopId", "Name", weekDay.Shop.ShopId), "" ) var viewModel = new ShopWe

我有以下
DropDownListFor
ShopId
条目可以为空,我希望保持这种状态。此下拉列表显示商店,如下所示:

@Html.DropDownListFor(m => weekDay.Shop.ShopId,
    new SelectList(Model.ShopItems,
        "ShopId",
        "Name",
        weekDay.Shop.ShopId),
        ""
)
var viewModel = new ShopWeekDayViewModel
                    {
                        ShopItems = db.Shops.ToList(),
                        WeekDays = db.WeekDays.ToList()
                    };
现在,我希望应用程序不会给出
System.NullReferenceException:对象引用未设置为对象的实例
-当值为
NULL
时出错。我尝试过使用
if语句
try语句
。除了丑之外,它们也不起作用

当数据库中的值为
NULL
时,有人知道如何显示默认的空字符串吗

/以另一种方式编辑同一问题。控制器如下所示:

@Html.DropDownListFor(m => weekDay.Shop.ShopId,
    new SelectList(Model.ShopItems,
        "ShopId",
        "Name",
        weekDay.Shop.ShopId),
        ""
)
var viewModel = new ShopWeekDayViewModel
                    {
                        ShopItems = db.Shops.ToList(),
                        WeekDays = db.WeekDays.ToList()
                    };
如何过滤
ShopItems
中的空值并将其更改为空字符串

/编辑2

数据库中的值如下所示:

@Html.DropDownListFor(m => weekDay.Shop.ShopId,
    new SelectList(Model.ShopItems,
        "ShopId",
        "Name",
        weekDay.Shop.ShopId),
        ""
)
var viewModel = new ShopWeekDayViewModel
                    {
                        ShopItems = db.Shops.ToList(),
                        WeekDays = db.WeekDays.ToList()
                    };

当我将空值更改为1或2时,代码会工作…

我真的不明白为什么要为下拉列表显示无效选项。如果它不是一个有效的选项,为什么允许用户选择它呢?只需完全过滤掉
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实体,这将生成以下异常:

无法在LINQ to Entities查询中构造实体或复杂类型车间

我不确定LINQ to SQL是否也会出现这种情况,但您可以先投影到匿名类型,然后投影到
商店

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

我认为异常即将出现,因为weekDay.Shop尚未初始化。我已编辑了问题。如果我将null值更改为整数,则代码有效。请检查列表propoEntry ShopItems中使用的类的代码。确保ShopId在此类中可为null。它可为null。问题是它在视图上不能为NULL。谢谢。我决定添加一个没有名字的商店,以便能够选择“没有商店”选项。