2009-08-12 6 views
0

基本的には、データを一般的な方法で収集し、入力/値ペアをCSVファイルにシリアル化するサブミッションフォームがあります。私は新しいコントローラアクションを書く必要なしに新しい投稿ページを追加したいと思います(新しいアセンブリをコンパイルして配備する必要はありません)。だから、ここに私の考えです:すべてのコントローラアクションを1つのメソッドにルーティングし、アクション名に応じてビューを表示します。

http://foobar.com/Submission/Contact
http://foobar.com/Submission/Apply

両方必要がありますSubmissionController.Handle()メソッドへのルートが。だから、

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Handle(FormCollection inputs) 

):

return View("Contact"); 
// or 
return View("Apply"); 

ビューは両方とも「/提出は/ハンドル」と、コントローラが持っていると同じように自分のフォームのアクションを持っています:handleメソッドは、適切なアクションのためのビューを表示しますどのように処理するために、およびb)私はアクション名のためにSubmissionController内から照会んどのように私は行うことができます適用連絡先と私はルートアクションの両方ん:

var viewName = GetActionName(); 
return View(viewName); 

はもちろん、私はへN00BよASP.NET MVC ...より良い方法があれば教えてください。

答えて

0

カスタムルートを作成する必要があります。 たとえば、デフォルトルートの前のglobal.asaxで:

// Submission/* 
routes.MapRoute(
     "Submission", 
     "Submission/{method}", 
     new { controller = "Submission", action = "Handle", method = "" } 
    ); 

あなたは括弧内に何かを追加することができ、それはRouteValueDictionaryルートの値への鍵となります。コントローラとアクションは、ASP.NET MVCで使用される表記規則です。

あなたはそれが述べた方法: をお使いのコントローラに「メソッド」と呼ばれるこの新しいキーにアクセスするには、あなたのような何かをしたい:

その後
string methodName = RouteData.Values["method"]; 

を、私はあなたのそれぞれのスイッ​​チを行う推測しますメソッド。

おそらく、より簡単な方法: の代わりに特定のビューを返すためにswtichをやって、私は何をしたいことは次のとおりです。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Handle(FormCollection inputs) 
    { 
     ViewData["method"] = RouteData.Values["method"]; 

     return View(); 
    } 

はViewDataをにmethodNameのを追加します。 HandleViewを返します。次に、フォームの種類ごとに部分を作成します。 HandleViewで、次のように入力します。

<% Html.RenderPartial(ViewData["method"]); %> 

こうして、ハードコードされた経路の束を処理する必要はありません。しかし、ルートに渡されるエラーや不正なメソッドを処理する必要があります。

+0

PartialView戦略は間違いなく好きです。助けてくれてありがとう! – xanadont

+0

問題ありません。 http://www.asp.net/learn/mvc/にルーティングに関する詳細(制約、カスタムルートなど)があり、以下のビデオを好む場合はhttp://www.asp.net/learnをご覧ください。/mvc-videos / –

関連する問題