所有我想做的就是让我的网址将博客添加到其中,就像下面这样......
http://localhost/blog/blogpost/17
这是我的控制器...
public ActionResult BlogList(){ return View(_repository); }
public ActionResult BlogPost(string id)
{
ViewData["id"] = id;
if (ModelState.IsValid)
{
return RedirectToAction("BlogPost", new { id = id });
}
return View(_repository);
}
现在这是我的route.config maproute
routes.MapRoute(
"MyBlog", // Route name
"blog/{action}/{id}", // URL with parameters
new { controller = "Blog", action = "blogpost", id =
UrlParameter.Optional } // Parameter defaults
);
现在,当我点击blogList中的博客时,我可以显示该网址。该页面不显示博客,它显示重定向循环消息。如果我省略以下代码......
if (ModelState.IsValid)
{
return RedirectToAction("BlogPost", new { id = id });
}
然后我可以显示博客。网址不会有id值。像这样......
http://localhost/blog/blogpost/
我做错了什么?
答案 0 :(得分:0)
删除带有0参数的BlogList()
public ActionResult BlogList(){ return View(_repository); }
这不是必需的,因为您的id是string
的类型,可以为null
以下代码可以帮助您
public ActionResult BlogPost(string id)
{
var model=new ModelObject();
if(id!=null)
{
var model=Blogs.Find(id); //find it from repo
return View(model);
}
return View(model);
}
答案 1 :(得分:0)
从您的代码看,它看起来不像id字段是可选的。因此我会改变路线。
routes.MapRoute(
"MyBlog", // Route name
"blog/blogpost/{id}", // URL with parameters
new { controller = "Blog", action = "blogpost" },
new { id = @"(\d)+"} //ensures value is numeric.
);
答案 2 :(得分:0)
以下代码适用于您的路线:
// http://localhost/blog/bloglist
public ActionResult BlogList()
{
return View(_repository); // show all blog posts
}
// http://localhost/blog/blogpost/1
public ActionResult BlogPost(int? id = null)
{
if (id.HasValue == false || id.Value < 1)
{
// redirect to 404 page or BlogList
throw new NotImplementedException();
}
var blogPostObj = _repository.Find(id.Value);
if (blogPostObj == null)
{
// again redirect to 404
throw new NotImplementedException();
}
return View(blogPostObj);
}
答案 3 :(得分:0)
RouteData.Values["id"] + Request.Url.Query