2014-02-17 53 views
0

我有一個表示事物下拉列表的表單。您選擇所需的東西,然後點擊好的按鈕。它提交使用GET形式和所得網址爲:routes.MapRoute不適用於與GET一起提交的表單

/事/ IdentificationInformation jamesID = 26

所以我申請一個路由規則:

 routes.MapRoute(
      name: null, // "Add James relationship" 
      url: "James/IdentificationInformation/{jamesID}", 
      defaults: new { 
       Controller = "James", 
       action = "IdentificationInformation" 
      } 
     ); 

但此URL路徑沒有得到應用?

被提交的形式如下:

 @using (Html.BeginForm("IdentificationInformation", "James", FormMethod.Get)) 
     { 
      <div class="col-lg-9 col-md-9 col-sm-9 add-margin-top"> 
        @Html.DropDownList("jamesID", new SelectList(Model, "JamesID", "Name"), new { id = "JamesDropdownList" }) 
      </div> 
      <div class="col-lg-3 col-md-3 col-sm-3 add-margin-top"> 
       @Html.ContinueButton("Continue") 
      </div> 
     } 
+0

什麼我可以添加到這個問題,以幫助得到答案?這有點奇怪。 – Jimmyt1988

+0

你有沒有在此之前定義的任何可能首先匹配的路線?另外,在你的Html.BeginForm()中,它看起來像是控制器是JamesController ... – Peter

+0

之前沒有路線,沒有。這是一個錯字,對不起,感謝你接受。我最終不得不做2個控制器,一個從窗體獲取POST請求,然後重定向到另一個返回視圖的控制器。這就像路由規則不適用於表單提交? – Jimmyt1988

回答

0

的問題是,你的路線預計jamesID是URL路徑的一部分,但表單提交它作爲查詢字符串的一部分。如果你改變你的路線,這樣的事情,就應該匹配:

routes.MapRoute(
     name: null, // "Add James relationship" 
     url: "James/IdentificationInformation", 
     defaults: new { 
      Controller = "James", 
      action = "IdentificationInformation" 
     } 
    ); 

,當然,這條路線可能甚至沒有必要的,因爲它相當於{控制器}/{行動}的缺省路由。

如果你想變得很花哨,你可以定義一個自定義的QueryStringConstraint來確保jamesID作爲路由匹配的一部分在查詢字符串中。這裏有一個SO問題,表明該怎麼做:

Can my MVC2 app specify route constraints on Query String parameters?

+0

謝謝...這是有道理的,爲什麼...羞愧它是這樣一個麻煩實施:)。我目前的解決方案是2控制器方法。一個從表單獲取POST請求,然後重定向到另一個返回視圖的控制器方法。 2請求一個網頁只是爲了一個漂亮的URL ...我想答案是這是一個糟糕的工作。我會看看我是否可以實現你的想法。 – Jimmyt1988