Asp.net mvc 我如何定义一个不';你不需要询问吗?

Asp.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”

以下操作不需要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(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 
}