以下操作不需要查询字符串,但它确实需要在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(String name)
{
Domain domain = db.Domains.Where(d => d.Name == name).First();
return View(domain);
}
非常感谢任何帮助。
答案 0 :(得分:3)
“序列不包含元素” 错误是因为您的LINQ查询未返回此 where子句的任何结果但是您试图在结果集上应用First()
函数(在这种情况下,这不适用于您的where条件)。
如果您确定要应用此功能的结果集中有Atleast one元素,请使用First()函数。如果LINQ表达式没有元素,则应用First
将引发上述错误。
要使URL具有name
参数而不是整数id,只需将参数类型更改为string
即可。将变量名称保留为 id 本身。因为这就是MVC路由将用来帮助你编写那些漂亮的URL。
现在您的网址可能就像
一样../SomeController/Details/someName
someName
将成为Details
操作方法的参数值。
我会使用FirstOrDefault
并检查一个元素是否可用于LINQ表达式。FirstOrDefault将返回序列的第一个元素,如果序列包含,则返回默认值没有元素。
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
}