我怎样才能获取我的get变量?

时间:2014-01-03 13:45:50

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

我创建了一个名为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之前。

2 个答案:

答案 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);
        }
    }