MVC4 Razor - 试图在博客文章中获取网址ID

时间:2013-11-28 14:55:25

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

所有我想做的就是让我的网址将博客添加到其中,就像下面这样......

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/

我做错了什么?

4 个答案:

答案 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