Asp.net mvc 我如何定义一个不';你不需要询问吗?
以下操作不需要querystring,但需要在URL中传递IdAsp.net mvc 我如何定义一个不';你不需要询问吗?,asp.net-mvc,Asp.net Mvc,以下操作不需要querystring,但需要在URL中传递Id public ViewResult Details(int id) { Domain domain = db.Domains.Find(id); return View(domain); } 如何更改此设置,以便在URL中传递名称而不是Id 当我将其更改为以下内容时,无论我如何尝试执行它,它都会生成一个错误“Sequence contains no elements”
public ViewResult Details(int id)
{
Domain domain = db.Domains.Find(id);
return View(domain);
}
如何更改此设置,以便在URL中传递名称而不是Id
当我将其更改为以下内容时,无论我如何尝试执行它,它都会生成一个错误“Sequence contains no elements”
public ViewResult Details(String name)
{
Domain domain = db.Domains.Where(d => d.Name == name).First();
return View(domain);
}
非常感谢您的帮助。“序列不包含元素”错误是因为您的LINQ查询没有返回此where子句的任何结果,但您正在尝试对结果集应用First()
函数(在本例中,此函数不适用于where条件)
如果确定要应用此函数的结果集中至少有一个元素可用,请使用此函数。如果LINQ表达式的结果没有任何元素,则首先应用First
将抛出上述错误
要使URL具有name
参数而不是整数id,只需将参数类型更改为string
。将变量名保留为id本身。因为这就是MVC路由将用来帮助您编写这些漂亮URL的方法
所以现在你的URL可以是
../SomeController/Details/someName
其中,someName
将是Details
操作方法的参数值
我将使用FirstOrDefault
并进行检查,以查看元素是否可用于LINQ表达式。将返回序列的第一个元素,如果序列不包含元素,则返回默认值
public ViewResult Details(String id)
{
Domain domain = db.Domains.Where(d => d.Name == id).FirstOrDefault();
if(domain!=null)
return View(domain);
else
return View("NotFound") //Lets return the Not found View
}