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。谢谢。我决定添加一个没有名字的商店,以便能够选择“没有商店”选项。