0

レイアウトページにボタンがあり、異なるビュー間を移動することになっています。

<a id="next" href="/Navigation?CurrentPage=@ViewBag.CurrentPage">Next</a>

ViewBag.CurrentPage各ページの ViewModel に値を入力します。

ナビゲーション コントローラーは、次のコントローラーでアンカー クリックをインターセプトします -

public class NavigationController : Controller
{
    public void Index(string CurrentPage)
    {
        PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage);
        PageType nextPageEnum = currentPageEnum + 1;
        RedirectToAction(nextPageEnum.ToString());            
    }
}

Enum には ActionNames が順番に含まれているため、 currentPageEnum 値をインクリメントして次のページを見つけます。

enum PageType
{
    Page1,
    Page2
}

各アクションには、次のように Global.asax.cs にマッピング ルートがあります。

routes.MapRoute("Page1", "Page1", new { controller="controller1", action="Page1"});
routes.MapRoute("Page2", "Page2", new { controller="controller2", action="Page2"});

質問: このコードで他のコントローラーにリダイレクトできませんでした-

RedirectToAction(nextPageEnum.ToString()); 

リクエストはリダイレクトなしで終了します。

  1. どのような情報が不足していますか。
  2. ASP MVC で、異なるビュー間を移動するより効率的な方法はありますか

ありがとう!

4

2 に答える 2

4

return ステートメントを追加して、関数が何かを返すようにします。


public class NavigationController : Controller
{
    public ActionResult Index(string CurrentPage)
    {
        PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage);
        PageType nextPageEnum = currentPageEnum + 1;
        return RedirectToAction(nextPageEnum.ToString());            
    }
}

そして、アクションではなくマップされたルート名を参照しているので、このコードでは like のRedirectToRoute代わりに必要だと思います:RedirectToAction


public class NavigationController : Controller
{
    public ActionResult Index(string CurrentPage)
    {
        PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage);
        PageType nextPageEnum = currentPageEnum + 1;
        return RedirectToRoute(nextPageEnum.ToString());            
    }
}

しかし、(カミソリ) ビューから MVC 環境をナビゲートする最良の方法は次のようになることをお勧めします。

<div>
    @Html.ActionLink(string linkText, string actionName)
</div>

アクションが同じコントローラー内にある場合。このオーバーロードを使用しない場合:

<div>
    @Html.ActionLink(string linkText, string actionName, string controllerName)
</div>
于 2012-12-11T12:26:35.840 に答える
0

はい、以下のような効率的な方法があります。

ただ使う

   RedirectToAction("ACTION_NAME", "Controller_NAME");
于 2012-12-11T12:30:41.337 に答える