3

目前我正在使用 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 是否有效,但这不是问题的一部分。

4

1 回答 1

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);
    返回 this.Redirect(redirectUrl);

不过,请注意您的 URL 映射。上面的例子假设方法

    公共 ActionResult ShowThread(int id, int? post)

在 HomeController 中,默认路由没有改变。否则你应该

  1. 调整控制器名称前面的 URL(无控制器),或
  2. 更改您的默认路由以映射到控制器的名称。
于 2012-11-10T09:17:31.400 回答