【发布时间】:2014-09-16 08:09:05
【问题描述】:
我对如何解决这个问题感到困惑。
如果 custID = 0
,我想显示“未找到客户”@if (Model.Customer == null)
{
<p>no customer found</p>
}
else
{
<p> @Model.Customer.CustomerName </p>
}
控制器:
public ActionResult Index(int custID = 0)
{
var customer = (from c in db.Customers
where c.Id == (custID == 0 ? c.Id : custID)
select c).FirstOrDefault(); // .SingleOrDefault();
routes.MapRoute(
null,
"AAA/Index/{custID}",
new { controller = "AAA", action = "Index" }, new { custID = @"\d+" });
转到 URL“/AAA/Index/0”会在表中给出记录编号 ID = 1,如果没有 ID 为 0 的记录,则不为空。
我使用 SingleOrDefault 并出现以下错误:
序列包含多个元素
当“custID = 0”的记录不应该被找到时,FirstOrDefault() 怎么没有给我默认的 null 值?
【问题讨论】:
-
我对MVC有点陌生,但是你不会只是为
Index()创建一个不接受任何参数的重载,而不是使用0作为伪客户ID吗?跨度> -
@mason 实际上最好使用
int? custId。 -
为什么在
where中需要(custID == 0 ? c.Id : custID)?如果您将 custID 作为 0 传递,这将始终是正确的。 -
@rageit 我同意,刚刚得出了相同的结论:如果
custID为零,则所有客户都会被退回。 -
@Richard 我写评论都慢了:)
标签: asp.net asp.net-mvc linq asp.net-mvc-4