1

以下操作不需要查询字符串,但确实需要在 URL 中传递 Id。

    public ViewResult Details(int id)
    {
        Domain domain = db.Domains.Find(id);
        return View(domain);
    }

如何更改此名称,以便可以在 URL 中而不是 Id 中传递名称?

当我将其更改为以下内容时,无论我如何尝试执行它,它都会产生错误“序列不包含元素”。

    public ViewResult Details(String name)
    {
        Domain domain = db.Domains.Where(d => d.Name == name).First();
        return View(domain);
    }

任何帮助是极大的赞赏。

4

1 回答 1

3

“序列不包含元素”错误是因为您的 LINQ 查询没有返回此where 子句的任何结果,但您正尝试First()在结果集上应用该函数(在这种情况下不适用于您的 where 条件)。

当您确定要应用此函数的结果集中至少有一个元素可用时,请使用First()函数。如果 LINQ 表达式的结果没有元素,则 ApplyingFirst将引发上述错误。

要使 URL 具有name参数而不是整数 id,只需将参数类型更改为string. 将变量名称保留为id本身。因为这就是 MVC 路由将用来帮助您编写那些漂亮的 URL。

所以现在你的网址可以像

../SomeController/Details/someName

您的操作方法someName的参数值在哪里。Details

我会使用FirstOrDefaultand 来检查某个元素是否可用于 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 
}
于 2012-08-25T19:20:58.897 回答