3

最初の MVC 4 プロジェクトに 2 つ目の MapRoute を追加したいので、このコードをGlobal.asax.vbに追加しました

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
    routes.MapRoute( _
        "Math", _
        "Calculator/{action}/{foo}/{intBar}", _
        New With {.controller = "Calculator", .action = "Add", .foo = ""} _
    )
    routes.MapRoute( _
        "Default", _
        "{controller}/{action}/{id}", _
        New With {.controller = "Default", .action = "Index", .id = ""} _
    )

これは私のコントローラーです /Controllers/CalculatorController.vb

   Function Add(         ByVal foo     As String, 
                Optional ByVal intBar? As Integer = 1) As ActionResult
        ViewData("Message") = foo & " Welt"
        Return View()

    End Function

今私の問題、私が間違っていることは何ですか?

localhost:18118/Calculator/Add/Hallo - メッセージは "Welt" だけですが、"Hallo" はどこにありますか?

localhost:18118/Calculator/Add/Hallo/7 - エラー 404 ? なんで ?

あなたが私を助けて/教えてくれることを願っています。御時間ありがとうございます!

4

2 に答える 2

1

この問題は、2 つのルート「Math」と「Default」が異なる名前付きパラメーターを定義しているという事実によって引き起こされます。

ローカルホスト:18118/電卓/追加/ハロー

次に、「デフォルト」ルートが使用され、名前付きパラメーターは次のとおりです。

  • コントローラ = 電卓
  • アクション = 追加
  • id = ハロー

しかし、アクション Addには という名前のパラメーターが必要fooです。「Math」ルート マッピングの foo パラメータの名前をidに変更することをお勧めします。

 routes.MapRoute( _
        "Math", _
        "Calculator/{action}/{id}/{intBar}", _ ' foo renamed to id
        New With {.controller = "Calculator", .action = "Add", .id = ""} _
    )

また、Action パラメーターの名前も変更しますFunction Add(ByVal id As String,...。これを機能させるためです。

注:名前の変更は、それを機能させるための提案であり、これが最善の方法であると言っているのではありません...

于 2013-01-19T12:03:37.343 に答える
0

fooURL の param を.foo = ""defaults オブジェクトのステートメントでオーバーライドしているためだと思います。ルートにマップ{foo}するので、「Hallo」文字列を取り込みますが、それを空の文字列に置き換えます。

.foo = ""デフォルトオブジェクトから取り出してみてください。

于 2013-01-19T01:07:51.363 に答える