2016-04-25 6 views
0

現在、非常に大きなフォームで作業しています。ユーザーエクスペリエンスを向上させるために、フォームウィザード(複数のビュー/アクション結果)を実装してフォームを分割することをお勧めします。ASP.NET MVCフォームウィザードでURLバーを使用してウィザードのステップ(コントローラアクション)をスキップできない

要件の1つは、ユーザーがアプリケーションウィザードを起動する前に最小限の要件を満たしていることを確認する、小規模な適格性テストを完了する必要があることです。

これまで何もしていないこの問題に対しては、ユーザーがフォームウィザードビューにアクセスできるかどうかを判断するセッションで、たとえばIsEligibleなどのフラグを使用しています。私のコントローラーに、サーバーがビューを分離する2つのActionResults(EligibilityおよびWizardStepOne)があるとしましょう。例えば:

コントローラ - 未テストコード要するに

public ActionResult Eligibility() 
{ 
    Return View(); 
} 

[HttpPost] 
public ActionResult Eligibility(EligibilityViewModel model) 
{ 
    if(!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    Session["IsEligible"] = true; 

    return("Success"); 
} 

public ActionResult WizardStepOne() 
{ 
    bool stuff = (bool)Session["stuff"]; 

    if(IsEligible == null) 
    { 
     return("Eligibility"); 
    } 

    return RedirectToAction("Eligibility"); 
} 

ユーザの試みは、ウィザードとIsEligibleフラグの最初のステップは、次に資格ポストアクションユーザによって設定されていないアクセスする場合適格フォームにリダイレクトされます。

私もアクションフィルタを見てきましたが、あまり意味がありませんでした。また、後でこの機能を実装して、ユーザーがウィザードステップ間をスキップするのを防ぐことができます(例:WizardStepOneをスキップし、WizardStepTwoで開始する)。

この状況で上記の方が良い方法がありますか?私はむしろセッションを再開すると問題が発生するので、特にウィザードのステップ間でセッションを中止するために再起動ボタンが必要になるため、セッションの使用は避けてください。

答えて

0

簡単なステートマシンを使用してフォームを通じて有効なステップを定義するようなことがあると言われています。たとえば、ユーザーがステージ3にいるときは、ステップ2から来たかどうかをチェックします。特定のユーザーとセッションの各ステップについて、彼のセッションでいくつかのハッシュ値を保存することができます。そうすれば、URLに直接入力することはできません。

+0

興味深い。あなたは例を挙げることができますか? – user2488275

関連する問題