質問

私はアクションのようになります:

public class News : System.Web.Mvc.Controller
{
    public ActionResult Archive(int year)
    {
       / *** /
    }
}

るルートでのようになります:

routes.MapRoute(
           "News-Archive",                                              
           "News.mvc/Archive/{year}",                           
           new { controller = "News", action = "Archive" }
       );

URLの私には:

News.mvc/Archive/2008

私はこのページのフォームのようになります:

<form>
    <select name="year">
        <option value="2007">2007</option>
    </select>
</form>

届出書を提出るべきかもしれません。mvc/アーカイブ/2007の場合'2007"を選択します。

このフォームのaction属性には"ニュースmvc/アーカイブ".

ただし、宣言すればいい形のようになります:

<form method="get" action="<%=Url.RouteUrl("News-Archive")%>">

で描画して

<form method="get" action="/News.mvc/Archive/2008">

で誰か教えてくださいまた僕に足?

役に立ちましたか?

解決

ご夫婦問題になると思います。

第一に、ルートなデフォルト値は"年間"、そのURLに"/ニュースmvc/アーカイブ"を実際に有効でないためのルーティング。

第二には、期待形成の値を表示していルートパラメータを、実際にはそうではありませんどのようにHTMLです。ご利用の場合はプレーンフォルムを選択し、提出し、Urlを"?年=2007年"は終了します。これはいかに取得-方法で作動するよう設計されています。

でに行う必要があるという重要です。

  • したい場合は、ユーザが選択可能になにかをドロップダウンと変化する投稿のURL、そしておいてJavascriptを使用そのために(傍受しの提出を策定し、正しいURL)
  • んでも大丈夫/ニュースmvc/アーカイブ?年=として、2007年のサイトでは、できなくなることがあり{年}識別記号の経路を提案しています。また、"int year"パラメータを自動でフォーム値も読み込みアクションメソッドのパラメータ

他のヒント

とあると思った理由のルートを含{年}の発生経路のいつの時代もあります。

れば誰でも確認す。

ねこちらは、ソリューション(ブラッド-リーディンくにあります。

1)必要デフォルト値路線:

routes.MapRoute(
       "News-Archive",                                              
       "News.mvc/Archive/{year}",                           
       new { controller = "News", action = "Archive", year = 0 }
   );

2)にリダイレクトを構文解析パラメータを取得します中にいるのと同じURLをセグメント

public ActionResult Archive(int year)
{
   if (!String.IsNullOrEmpty(Request["year"]))
   {
       return RedirectToAction("Archive", new { year = Request["year"] });
   }
}

3)してくださいごにリダイレクトコードのご請求params 任意のコードを替"デフォルトは"年間作品の応募がありました。すなわち

public ActionResult Archive(int year)
{
   if (!String.IsNullOrEmpty(Request["year"]))
   {
       return RedirectToAction("Archive", new { year = Request["year"] });
   }
   if (year == 0)
   {
       /* ... */
   }
   /* ... */
}

3)明示的に指定のデフォルト値のUrl。RouteUrl()を呼び出:

Url.RouteUrl("News-Archive", new { year = 0 })
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top