路由和URL结构

时间:2010-11-18 16:55:20

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing

无论如何,我可以从生成的网址中排除ID字段,但仍然可以使用ID值吗?如果您使用StackOverflow URL:

http://stackoverflow.com/questions/3409196/asp-net-mvc-routing-question

可以在没有问题ID的情况下呈现该URL吗?

1 个答案:

答案 0 :(得分:1)

您可以显示没有ID的问题,但问题标题必须对每个问题都是唯一的。

此外,您仍然可以使用ID查找问题,然后重定向到另一个仅显示问题标题的网址。如果你想这样做,我可以发一个例子。

以下是一个例子:

// this method finds a file from database using the id
//and passes the object with TempData
    public ActionResult InitialDetail(int id)
    {
        var question = questionRepository.GetFile(id);
        if (question==null)
            return View("NotFound");
        else
        {
            TempData["question"] = question;
            return Redirect("/questions/" + question.Name);
        }
    }


//this method uses model passed from other method and displays it
    public ActionResult Details(string questionName)
    {
        if (TempData["question"] == null)
        {
            return View("NotFound");
        }
        else
            return View("Details", TempData["question"]);
    }

您还必须为此工作定义路线

routes.MapRoute("QuestionPage", //Files/id/fileName
            "questions/{questionName}",
            new { controller = "Questions", action = "Details" } );

在默认路线之前添加此路线。如果你有以http://domain.com/questions开头的URL路由,那么它可能会弄乱。

注意:这可能不是最佳解决方案。如果您的问题标题不是唯一的,则无法在页面中放置具有此结构的链接。首先,它必须使用ID查找问题。