-1

5 つのステップがある Web アプリケーションを作成しています。ホームページ1 ページ 2 レビューの確認。URL では、localhost:22112/Home/Page1 Page 2 のようになります。私の問題は、誰かが localhost:22112/Home/Page2 をコピーした場合、すべてをスキップしてページ 2 に直接ジャンプすることです。それで、どうすればそれを止めることができますか?以下を実行しましたが、正しく動作しません。どんな提案も本当に役に立ちます。

コントローラーで

 private bool IsFromIndexPage()
    {
        if (Session["IsFromIndex"] != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

そして、各ページのアクション結果について、このように書いています。

   [HttpGet]
    public ActionResult Page1()
    {   
  if (!IsFromIndexPage())
        {
            return RedirectToAction("Index");
        } 
    .....other methods..
    }  

    [HttpPost]
    public ActionResult Page1(Information model, string command)
    {   
  if (!IsFromIndexPage())
        {
            return RedirectToAction("Index");
        } 
    .....other methods..
    }  

  [HttpGet]
    public ActionResult Page2()
    {   
  if (!IsFromIndexPage())
        {
            return RedirectToAction("Index");
        } 
    .....other methods..
    }  

    [HttpPost]
    public ActionResult Page2(Information model, string command)
    {   
  if (!IsFromIndexPage())
        {
            return RedirectToAction("Index");
        } 
    .....other methods..
    }  
4

2 に答える 2

0

セッションを使用して手順の進行状況を保存している場合は、セッション変数をチェックして、リクエストが特定のページに対するものであることを確認する必要があります。それ以外の場合は、ユーザーを最初/現在の完了ページにリダイレクトします。

このためのカスタム リクエスト ハンドラーを記述して、セッション検証コードをコントローラー コードと分離しておくことができます。

やりたいことに基本的な機能を実装する方法については、この質問を参照してください

編集:

switch(currentStep){
   case 1:
     return Step1(model)
       break;
   case 2:
     return Step2(model)
       break;
   default:
       return new HttpNotFoundResult();
       break; 
}
于 2013-10-22T18:21:46.433 に答える
0

ここでは、ajax を使用して asp.net MVC でウィザードを作成する方法について、少し異なるアプローチを示します。

あなたの URL は、すべてのステップで /Home/Wizard になります。AjaxOnly 属性を使用しているため、Step1、Step2 などにアクセスすることはできません (AjaxOnly については、下部の参照を参照してください)。

コントローラ:

public ActionResult Wizard()
{
    return View();
}

[AjaxOnly]
public ActionResult Step1()
{
    return PartialView("Step1");
}

[AjaxOnly]
public PartialViewResult Step2(FormCollection coll)
{
    Session["FullName"] = coll["FullName"]!= null ? coll["FullName"].ToString() : string.Empty;
    return PartialView("Step2");
}

[AjaxOnly]
public PartialViewResult Confirm(FormCollection coll)
{
    WizardModel model = new WizardModel() { Name = Session["FullName"].ToString(), Phone = coll["Phone"] != null ? coll["Phone"].ToString() : string.Empty };
    return PartialView("Confirm", model);
}

最後のステップのモデル:

public class WizardModel
{
    public string Phone { get; set; }
    public string Name { get; set; }
}

ページ/レイアウトページで jquery.unobtrusive-ajax を参照していることを確認してください

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

Wizard.cshtml

@{
    ViewBag.Title = "Wizard";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Wizard - Overview</h2>
@using (Ajax.BeginForm("Step1", new AjaxOptions { HttpMethod="Get", UpdateTargetId = "wizardcontainer" }))
{
    <input type="submit" value="Start wizard" />
}
<div id="wizardcontainer"></div>

Step1.cshtml

<div>
    <h2>Wizard - Step 1</h2>
    <br />
    @using(Ajax.BeginForm("Step2", new AjaxOptions { UpdateTargetId = "wizardcontainer" }))
    { 
        @Html.Label("FullName")
        @Html.TextBox("FullName")
        <input type="submit" value="Next >>" />
    }
</div>

Step2.cshtml

<div>
    <h2>Wizard - Step 2</h2>
    @using(Ajax.BeginForm("Confirm", new AjaxOptions { UpdateTargetId = "wizardcontainer" }))
    { 
        @Html.Label("Phone")
        @Html.TextBox("Phone")
        @Ajax.ActionLink("<< Previous", "Step1", new AjaxOptions { UpdateTargetId = "wizardcontainer" })
        <input type="submit" value="Next >>" />
    }
</div>

確認.cshtml

@model MvcApplication2.Controllers.WizardModel
<div>
    <h2>Wizard - Final Stage</h2>
    Name: @Model.Name
    <br />
    Phone: @Model.Phone
    @Ajax.ActionLink("<< Previous", "Step2", new AjaxOptions { UpdateTargetId = "wizardcontainer" })
</div>

AjaxOnly 属性については、こちらをご覧ください: http://helios.ca/2009/05/27/aspnet-mvc-action-filter-ajax-only-attribute/

于 2013-10-22T19:14:31.610 に答える