我创建了一个名为LibraryController
的控制器,它有一个名为ActionResult
的{{1}},它带有参数(int id)。
我尝试在Movie
中添加以下路线:
RouteConfig.cs
但是在方法 routes.MapRoute(
name: "Movie",
url: "Library/Movie/{id}",
defaults: new { controller = "Library", action = "Movie", id = (string)null }
);
中,id为null,即使我将浏览器重定向到Movie(string id)
那是什么? /Library/Movie/1
定义在MapRoute
之前。
答案 0 :(得分:1)
您应该使用UrlParameter.Optional
否则很可能解析路线的内部人员将使用null
调用您的操作/方法。
路由的可选参数值的正确实现是:
routes.MapRoute(
name: "Movie",
url: "Library/Movie/{id}",
defaults: new { controller = "Library",
action = "Movie",
id = UrlParameter.Optional }
);
您的控制器和操作应该是:
public class LibraryController : Controller
{
public ActionResult Movie(string id)
{
// do something with id here
return View();
}
}
答案 1 :(得分:1)
正如我的评论所述,请尝试使用
id = UrlParameter.Optional or id ="MovieId" or id = ""
routes.MapRoute(
name: "Movie",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Library", action = "Movie", id = UrlParameter.Optional }
);
然后你的控制器看起来像:
public class LibraryController : Controller
{
public ActionResult Movie(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie m = _context.Movies.Find(id);
if (m == null)
{
return HttpNotFound();
}
return View(m);
}
}