2011-07-05 14 views
4

何らかの理由で、ASP.NET MVC3のローカルインストールで引数を使用してURLを解決しようとすると、引数が基本的にコントローラの処理機能のnullになります。例えばASP.NET MVC3のURLパラメータがnullに解決される

、私は

public class HomeController : Controller 
{ 
    public ActionResult Foo(string bar) 
    { 
     ViewBag.Message = bar; 
     return View(); 
    } 
} 

を持っているとhttp://localhost/myapp/foo/sometextまたはhttp://localhost/myapp/home/foo/sometextを訪問しようと、bar基本的にnull代わりのsometextに評価されます。

MVC3のインストールが正常に機能していると私は確信しています。数日前にカスタムルーティングルールを使用して別のアプリケーションを実行することができました。私は気をつけて、configフラグをどこかに壊してしまったかもしれない。

ここで何が間違っているかに関するアイデアはありますか?

答えて

8

デフォルトのルートマッピングでは、アクション内にidという名前のパラメータが必要です。

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

あなたがこれまであなたのアクションに変更した場合:

public ActionResult Foo(string id) 

を、それが動作するはずです。パラメータ名の変更が不可能な場合は、このようなURLを試すこともできます。

http://localhost/myapp/home/foo/?bar=sometext 
+0

Huh。それは間違いなく、トリック、ありがとう。しかし、私は、 'public ActionResult foo(string herp、string derp){}'のようなコントローラ関数を記述し、 'http:// localhost/myapp/home経由で自動的に*取得する必要があるという印象を受けました/ foo/1/2/'またはそれに類するもの。これは、引数(および引数名)の数に関して使用するすべてのURLパターンに対してカスタムルートを作成する必要があることを意味しますか?それはとても便利ではありません。 –

+0

カスタムルートなしで、 'http:// localhost/myapp/home/foo/1/2 /'経由で 'public ActionResult foo(string herp、string derp)'のようなアクションにナビゲートすることはできません。しかし、 'herp'と' derp'のテキストボックスを持っている限り、カスタムルートを設定することなく、HTTP POST経由でフォームを送信することができます。私の経験では、特定のプロジェクトで必要とするすべてのルーティング要件を満たすいくつかのコンベンションを考えるのは難しくありませんが、要件によって異なります。 – gram

+0

ええ、私はそれが実際にルーティングルールを長期的に思い付くのは難しいことではないと思います。私のMVCの経験はCakePHPとCodeIgniterから来ているので、それは飲み込むのにちょっとした難題です。しかし、私を気にしないでください。 :D大きな助けをありがとう! –

関連する問題