2012-03-21 7 views
1

Contact」と「ThankYou」アクションを使用するコントローラ「About」がある一般的なシナリオを持つASP.NET MVC 3アプリケーションがあります。 /about/contactに行き、フォームに記入して提出し、/about/contact/thankyou *ページに移動して、フォームの内容(別名ビューモデル)が表示されるようにします。異なるルートを持つビューにビューモデルを渡しているときにRedirectToActionを使用する方法

**そこには、「連絡先」のコントローラがあることも、私は可能であれば、この目的のために作成したいん。*

私はビューモデルに渡すために再提出(Post/Redirect/Getパターン)とTempDataを防ぐためにRedirectToActionを使用していますありがとうございました。 また、私は把握できなかった一つのことがある

しかし、(そう、それはウェブ解析では、「目標」として登録しません)フォームページに連絡するページが直接到達したあなたに感謝しているかどうかを確認して戻ってリダイレクトするようにTempDataを使用することができますどのように別のルートを使用して、ありがとうページのように表示されます/about/contact/thankyou

私はこの権利をしていますか? 良い方法がありますか? AboutController

<!-- language: c# --> 
[RequireHttps] 
public ActionResult Contact() 
{ 
    var viewModel = new ContactViewModel(); 
    return View(viewModel); 
} 
[RequireHttps] 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Contact(ContactViewModel viewModel) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(viewModel); 
    }  
    // not sure if this is the best way or how to redirect to /contact/thankyou 
    TempData["viewModel"] = viewModel; 
    return RedirectToAction("ThankYou"); 
}    

[RequireHttps] 
public ActionResult ThankYou() 
{ 
    var viewModel = TempData["viewModel"]; 
    // upon direct access, viewModel will be null and missing, so redirect to Contact form 
    if (viewModel == null) 
    { 
     return RedirectToAction("Contact"); 
    } 
    return View(viewModel); 
} 

答えて

0

ここ

ある関連するアクションデフォルトルートの前にカスタムルートを定義することができます。

routes.MapRoute(
    "contact", 
    "about/contact/thankyou", 
    new { controller = "About", action = "ThankYou" } 
); 

を今、あなたはContact GETアクションが実行されます/about/contactに移動したときに(あなたは、それはあなたのコードのように名前を変更する必要がありますそれはContactUsと呼ばれます)。ユーザーがフォームを入力し、Contact POSTアクションに送信します。 URLは現時点では同じままです:/about/contact。リダイレクト後、ThankYouアクションが実行され、URLは/about/contact/thankyouに変更されます。

+0

これは、 '/ about/contact'を指しているサイトのすべてのリンクを' /about/contact/contact'に書き換えています。コードサンプルを編集してContactUsの名前をContactアクションに変更しました... – zam6ak

+0

私はあなたのアプローチを変更して動作させました。ルートは 'about/contact/thankyou'であり、最後の行は' new {controller = "About"、action = "ThankYou"}です。 '私はアイデアを与えてもらえたと思うけど、私はそれに印を付けることができますか? – zam6ak

+0

@ zam6ak、回答が更新されました。 –