1

私は次のルートを持っています:

routes.MapRoute("Archive", "archive/{year}", new
    {
        controller = "Archive",
        action = "Results"
    }
);

ルートは正しく機能していますが、URL を次のように表示したいと考えています。

http://mysite.com/archive/2008

ただの代わりに検索ボタンをクリックすると:

http://mysite.com/archive

そのURLへのアクションリンクを作成してこれを行いたくありません。送信ボタンでそれを行いたいです。

編集:

より詳しい情報。私のホームページには、送信ボタンがクリックされたときに、テキストボックスに入力された年の値を Action メソッドに渡すテキストボックスがあります。これは、年という 1 つのパラメーターを受け取るアーカイブコントローラーの結果です。現在、メソッドで正しい値を取得しています。URLにも年を表示したいだけです。上記のように手動で URL に年を入力すると、期待どおりに機能します。

ありがとう!

4

3 に答える 3

3

次のように、Year パラメーターを BeginForm() に渡す必要があります。

<% 
    using (Html.BeginForm("Results", "Archive", new { year = DateTime.Now.Year }))
    {
        // form
    }
%>
于 2009-08-18T07:42:19.280 に答える
1

{year}その場合のように、パラメーターのデフォルト値を設定する必要があります2008。したがって、必要なルートは次のとおりです。

routes.MapRoute("Archive", 
  "archive/{year}", 
  new { controller = "Archive", action = "Results", year = 2008 } );

これを動的にすることもできます。

routes.MapRoute("Archive", 
  "archive/{year}", 
  new { controller = "Archive", action = "Results", year = DateTime.Now.Year } );

ただし、これは Web アプリケーションの開始時にのみ動的であることに注意してください。これは、ルートが で定義されているためです。Application_Startこれは 1 回発生し、DateTime.Now.Yearの値はその時点での値としてキャッシュされます。

于 2009-08-18T05:10:09.697 に答える
1

フォームを送信すると投稿される「年」という名前の非表示のフォーム要素を持つこともできます

<%=Html.Hidden("year",2008) %>
于 2009-08-18T15:11:28.790 に答える