3

ASP.NETMVC4アプリに取り組んでいます。このアプリにはウィザードが必要です。ウィザードには3つの画面があります。マップするURLが必要です:

/wizard/step-1
/wizard/step-2
/wizard/step-3

WizardControllerには、次のアクションがあります。

public ActionResult Step1()
{
  var model = new Step1Model();
  return View("~/Views/Wizard/Step1.cshtml", model);
}

[HttpPost]
public ActionResult AddStep1(Step1Model previousModel)
{
  var model = new Step2Model();
  model.SomeValue = previousModel.SomeValue;

  return View("~/Views/Wizard/Step2.cshtml", model);
}

[HttpPost]
public ActionResult AddStep2(Step2Model previousModel)
{
  var model = new Step3Model();
  return View("~/Views/Wizard/Step3.cshtml", model);
}

このアプローチは機能しますが、私の問題はブラウザのURLが更新されないことです。ステップから値を投稿し、ユーザーを別のデータモデルの新しいURLにリダイレクトするにはどうすればよいですか?

ありがとうございました!

4

1 に答える 1

2

呼び出すウィザードの各ビューでHtml.BeginForm()、目的のルート、または目的のコントローラー、アクション、およびその他のルーティングパラメーターのいずれかを受け入れるオーバーロードを呼び出すようにしてください。たとえば、Step1.cshtmlでは次のようになります。

@using (Html.BeginForm("Step-2", "MyWizard")) {
    // put view stuff in here for step #1, which will post to step #2
}

これにより、ターゲットURLは「きれい」になりますが、アクション名自体が「醜い」状態になることは修正されません。これを修正するために、MVCには、アクションメソッドの名前をほぼすべての名前に「変更」する機能があります。

[HttpPost]
[ActionName("step-2")] // this will make the effective name of this action be "step-2" instead of "AddStep1"
public ActionResult AddStep1(Step1Model previousModel)
{
    // code here
}

アプリがデフォルトのMVCルート(コントローラー/アクション/ ID)を使用していると仮定すると、各ステップには独自のURLがあります。

于 2013-02-05T18:10:49.767 に答える