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 オーバーロードの 1 つを使用することです: 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 });

もう 1 つの (より単純ですが、安全ではありません!) 解決策は、リダイレクト先の URL をフォーマットし、次のように Redirect() メソッドを使用することです。

    var redirectUrl = string.Format("/Home/ShowThread/{0}?post={1}", id, postID);
    this.Redirect(redirectUrl); を返します。

ただし、URL マッピングには注意してください。上記の例は、メソッドを想定しています

    public ActionResult ShowThread(int id, int? post)

は HomeController にあり、デフォルト ルートは変更されていません。そうでなければあなたはすべきです

  1. コントローラー名の前に URL を調整する (コントローラーなし)、または
  2. コントローラの名前にマップするようにデフォルト ルートを変更します。
于 2012-11-10T09:17:31.400 に答える