是否有简单的方法在控制器动作生成的URL中使用书签?

时间:2012-10-24 09:34:37

标签: asp.net-mvc

目前我正在使用ASP.NET MVC 3中的简单论坛模块,稍后我将添加到我的主应用程序中。链接到某些块(如用于呈现线程回复的div)的可能性非常有用。

我想出了一些可以满足我需求的东西,我只是想知道是否有更优雅和简单的东西。我找到了一个使用ActionFilters的解决方案,因为我非常喜欢MVC,我想找到一些更简单的解决方案(如果存在)。好吧,我很快就会学习ActionFilters:)

所以这就是我所做的:

public ActionResult ShowThread(int id, int? postID)
{

    var thread = db.ForumThreads.Find(id);
    if (postID != null)
    {
        return Redirect(Url.Action("ShowThread",new {id=id})+"#post-"+postID.ToString());
    }
    return View(thread);
}

我知道这很简单,但它确实有效。此外,它不会检查postID是否有效,但它不是问题的一部分。

1 个答案:

答案 0 :(得分:0)

解决方案是使用RedirectToAction重载之一:http://msdn.microsoft.com/en-us/library/dd470154(v=vs.108).aspx。 也许,在你的情况下,下一个会做:http://msdn.microsoft.com/en-us/library/dd460291(v=vs.108).aspx
电话会是:


    return this.RedirectToAction("ShowThread", new { id = id, post = postID });

另一个(更简单,但不安全!)解决方案是格式化您需要重定向到的URL并使用Redirect()方法,如下所示:


    var redirectUrl = string.Format("/Home/ShowThread/{0}?post={1}", id, postID);
    return this.Redirect(redirectUrl);

但请注意您的网址映射。上面的例子假设方法


    public ActionResult ShowThread(int id, int? post)

在HomeController中,默认路由尚未更改。否则你应该

  1. 调整URL前置控制器名称(无控制器)或
  2. 更改您的默认路线以映射到控制器的名称。