1

ユーザーがフォーム内のドロップダウン ボックスで行った選択に応じて、フォームのアクションを変更する必要があります。.NET 4.5 に MVC4/C# プロジェクトがあります。

ユーザーが行う選択は、どのコントローラーまたはどのアクションを呼び出す必要があるかに影響します。

少し調べてみたところ、いくつかの解決策にたどり着きました。

  • JQuery クライアント側を実装して、フォームのアクションを動的に変更する
  • リクエストを適切なコントローラー/アクションにルーティングする専用の特定のアクションにフォームを移動させます

私が読んだことによると、クライアントが JavaScript を実行していることを確認できないため、JQuery を使用しないことをお勧めします。また、同様の問題もあります。

ここで 2 番目のオプションを試してみましRedirectToActionた。スイッチ ブロック内でルーティングを実行しようとしましたが、リダイレクトによって GET が発生するため、POST データでは機能しません。

コントローラー内で私が試みたものの例は次のとおりです。

    [HttpPost]
    public ActionResult Index(TestObject object)
    {
        switch (object.Type) {

            case("A"):
                return RedirectToAction("ActionA");
            case ("B"):
                return RedirectToAction("ActionB");
            case ("C"):
                return RedirectToAction("ActionC");
            default:
                ModelState.AddModelError("", "Invalid Type");
                return View();
        }
    }

    [HttpPost]
    public ActionResult ActionA(TestObject object)
    {
            // Do Stuff for ActionA
            return View();
    }

これは私が作成した最初の MVC プロジェクトなので、このような状況で JQuery を使用しないように誰もが言い続ける場合、どのように考えるのが適切なのか疑問に思っています。

2 番目のオプションが「適切な」解決策である場合、代替コントローラー アクションにデータを送信するにはどうすればよいですか?

4

2 に答える 2

2

次のようなことができます。つまり、フォームの値をルート値として渡します。

RedirectToAction("ACTIONNAME", "CONTROLLERNAME", ROUTEVALUES);

例えば

this.RedirectToAction("displayimport", "coilenquiry", new { Number = number });

次に、アクションでパラメーターを使用します...

    public ActionResult DisplayImport(string Number)
    {

    }
于 2013-09-19T10:11:14.983 に答える
2

RedirectToAction現在、モデルを直接渡す方法はありません。これは何のためのものTempDataです:

TempData["MyModel"] = model;

switch (object.Type) {
    case("A"):
        return RedirectToAction("ActionA");
    case ("B"):
        return RedirectToAction("ActionB");
    case ("C"):
        return RedirectToAction("ActionC");
    default:
        ModelState.AddModelError("", "Invalid Type");
        return View();
}

HttpPost次のアクションで (これは GET リクエストになるため、アノテーションを削除する必要があることに注意してください):

var model = TempData["MyModel"] as TestObject;

ただし、私は可能な限りセッション ストレージを避けることを好みます。したがって、このシナリオでは、jQuery を使用するメリットがないとは言えません。「JavaScript を無効にできる」という議論は、最近のサイトの大部分が JavaScript に依存していることを考えると、今日ではかなり根拠のないものです。

于 2013-09-19T10:06:59.357 に答える