2009-07-27 6 views
2

how to make a wizard with ASP.Net MVC 各ページにはそれぞれ独自のdivがありますが、各divは実際には同じページに配置されています。今、2つの問題があります...私はMVCを初めて使い、次のページに進む前に何らかの検証をしたいと考えています。検証の範囲は単純なテキストボックス(そこにデータがありますか?)から、正しい形式のテキストボックスのデータです。ドロップダウンリストに項目があるかどうか、リストボックスに項目があるかどうか(相互に排他的なリストボックス)。だから、ページング/ソートのテーブルをいくつかのページがユーザーがリストから項目を選択し、その項目を変更するか、または新しい項目を追加するように選択すると、それは何に依存するか、必要に応じて、最初のページで残りのページにデータを入力します。ここset div visible fasle in get method of controllerまだそれは私のために動作しませんから位置検証後にdivを表示する

public ActionResult ContinueToCorr(string Number, string Rev) 
    { 

     ViewData["DivIsVisible"] = true; 
     return RedirectToAction("../Wizard/Index/1"); 
    } 

:今、私はこれを試してみました。

また、私は以下のことをしたいと思います。ユーザーがウィザードを起動する前に、選択ページが表示されるように(明らかに)選択した後、IDは localhost:xxxx/Wizard/'PartNumber'/'PageNumberOfWizard'ユーザーが部品番号12345を選択してウィザードを開始すると、ページ2の場合はlocalhost:xxxx/Wizard/12345/1(1ページ)およびlocalhost:xxxx/Wizard/12345/2にリダイレクトされます。次のdivを表示し、検証が成功した後に前の項目を隠すページ。

routes.MapRoute(
      "Wizard",            // Route name 
      "Wizard/{PartNum}/{PageId}",       // URL with parameters 
      new { controller = "Wizard", action = "Index" } // Parameter defaults 
     ); 

だから、それかのように見えます:

最後に、私が思い付いた私は、Webアドレスに前に欲しかったものを手に入れるために、ルーティングのためasaxファイルを再生することを試みたが、これはあります常にウィザードコントローラのIndexメソッドを呼び出します。

今、私は私のビューページで、次の試してみました:

次のページに継続する前に、検証プロセスを開始するには、そのボタンのための新しい特定の機能を呼び出すために、フォーム内の各ボタンを取り巻く
<% Html.BeginForm("ContinueToPage", "Wizard", FormMethod.Post); %> 
         <div class="span-87 buttons"> 
          <input type="submit" value="Continue" name="button" /> 
         </div> 
        <% Html.EndForm(); %> 

とコードの後ろは次のようになります。

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult ContinueToCorr(string Number, string Rev) 
    { 
     //if (String.IsNullOrEmpty(Number)) 
     // ModelState.AddModelError("Number", "Number is required"); 
     //if (String.IsNullOrEmpty(TPSSWRevision)) 
     // ModelState.AddModelError("Rev", "Revision is required"); 
     //if (!ModelState.IsValid) 
     // return View(); 

     ViewData["DivIsVisible"] = true; 
     return RedirectToAction("../Wizard/Index/1"); 
    } 

完全に正しければわかりませんが、私はここでサークルを走っているように感じます。どうもありがとう。申し訳ありませんが、私はできるだけ詳細にしたいと思っていました。また、私はこれを含めました:

<script runat="server"> 
protected bool DivIsVisible { 
    get { 
     return ViewData["DivIsVisible"] != null && (bool)ViewData["DivIsVisible"]; 
    } 
} 
</script> 

ビューでも、何もありません。

答えて

1

私はあなたの最初の質問に答えることができます:あなたはすべてのViewDataをクリアしRedirectToActionを、使用している

public ActionResult ContinueToCorr(string Number, string Rev) 
{ 
    ViewData["DivIsVisible"] = true; 
    return RedirectToAction("../Wizard/Index/1"); 
} 

。代わりに、使用:

public ActionResult ContinueToCorr(string Number, string Rev) 
{ 
    ViewData["DivIsVisible"] = true; 
    return Index(1); 
} 

私はあなたのウィザードコントローラでIntパラメータを取るインデックスと呼ばれるActionResultがあると仮定しています。

+0

私のインデックス(この場合、このインデックスにはパラメータがありません)では、私はちょうど戻り値View()を持っています。私がそれを行うと、どこの場所でもContinueToCorr.aspxが見つからないというエラーが表示されます。私はあなたが関数の下に戻りView()を持っていたとしたら、その関数の名前が付けられたViewを探しました。この例ではIndexですか?何か不足していますか? – dangerisgo

+0

また、パラメータを使用してインデックスに何を渡すのですか? – dangerisgo

+0

いつも...レンダリングされたビューを強制したい場合は、return View( "Index"); 私はあなたの2番目のコメントを理解していません。私はあなたがそこに置くルーティング/ウィザード/インデックス/ 1のためにあなたがあなたのインデックスアクションに "1"を渡したいと思った。 – Francisco

関連する問題