无论如何,我可以从生成的网址中排除ID字段,但仍然可以使用ID值吗?如果您使用StackOverflow URL:
http://stackoverflow.com/questions/3409196/asp-net-mvc-routing-question
可以在没有问题ID的情况下呈现该URL吗?
答案 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查找问题。