我正在 MVC 4 中构建一个应用程序,但我被困在一件事上。
我有一个控制器和动作:
public ActionResult Details(string pattern, int id)
{
Post post = repository.GetPostById(id);
return View(post);
}
在视图中:
<div class="innerbody">
@Model.Description @Html.ActionLink("Czytaj dalej...", "Details", new { id = Model.PostId, pattern = Model.ShortUrl})
</div>
现在我想要完成的是 url 将是:
www.mysite.com/blog/pattern
没有id
. “模式”是ShortUrl
从帖子标题中提取的。
我尝试将这些不同的路由添加到 RouteConfig:
routes.MapRoute(
name: "Details",
url: "{Controller}/{pattern}",
defaults: new {controller = "Blog", action = "Details", pattern = "", id = UrlParameter.Optional}
);
或者
routes.MapRoute(
name: "Details",
url: "{Controller}/{pattern}",
defaults: new {controller = "Blog", action = "Details", pattern = ""}
);
但它不断抛出错误:
参数字典包含“MyBlog.Controllers.BlogController”中方法“System.Web.Mvc.ActionResult Details(System.String, Int32)”的不可空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。
我想我无法捕捉到这个“路由”的东西......我怎么能完成这个任务?