2016-11-22 51 views
2

我有一個asp.net MVC的網站,我有這個網址:獲取第三個參數在asp.net MVC

Home/Index/ 

有一個動作,我想做的事情,目前我正在做使用查詢字符串,像這樣:

Home/Index/?action=1 

我會用Request.QueryString["action"]然後把它在我的代碼。

但這看起來並不如它應該是不錯的,我想是這樣的:

Home/Index/Action 

那麼查詢字符串將是第三個參數。我該如何使用它,並檢查第三個參數是否存在,它的名稱?

我的路由配置是這樣的:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

我需要的路線改變任何東西或我可以進入我想要的方式,如果是這樣,我怎麼檢索此值?


編輯:

好吧。我想要做的是根據此參數在視圖中獲得不同的結果。

我現在所做的是創建兩個ActionResults,它們使用相同的View將不同的值發送到ViewData

+0

我想你可以通過使用asp.net web api 2的路由屬性來實現它。https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing -in-web-api-2,以下是mvc屬性路由的詳細信息https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ – Vinod

回答

4

在MVC中,有模型綁定的概念,其中使用參數的名稱,然後用表單中的值填充,而不必執行此操作。

如果你寫你的行動方法是這樣的:

public ActionResult Index(int action) 
{ ... } 

這樣便爲/Home/Index?action=1工作。

如果你想能夠調用它像/Home/Index/1那麼最簡單的方法就是簡單的寫操作方法是這樣的:

public ActionResult Index(int id) 
{ ... } 

這工作,因爲MapRoute定義基本上說「如果有以後的東西{action}部分(在這種情況下,它是「Index」),然後爲其指定參數名稱{id}並將其綁定到我的Action方法的參數{id}。 更新
與使用在稱爲action調用場景參數的問題是,{action}是MVC的特殊關鍵字。
要使用MySpecialParam兩個通話情景模式,你可以只添加此路線:

routes.MapRoute(
    name: "Default_MySpecialParam", 
    url: "{controller}/{action}/{MySpecialParam}", 
    defaults: new { controller = "Home", action = "Index", MySpecialParam = UrlParameter.Optional } 
); 

但是,如果MySpecialParam分別成爲action,然後有一個名稱解析衝突MVC大概不會知道如何處理,甚至可能會拋出錯誤。

+0

查看此評論http://stackoverflow.com/questions/40741029/get-third-parameter-in-asp-net-mvc#comment68708248_40741205 – Phiter

+0

查看我的更新... –

0

該行爲通常應該在控制器之後。我認爲在你的情況下,可能會更好地添加一個新的控制器,它有你想要的動作。

+0

事情是,我需要使用相同的觀點。如果我有兩個使用相同視圖的操作,傳遞類似的數據,你認爲更好嗎? – Phiter

0

我放棄了映射路由,因爲這很麻煩。您需要添加一個新的路線的參數每一個數字,就像如下:

routes.MapRoute(
     "ThreeIds",         // Route name 
     "{controller}/{action}/{firstId}/{secondId}/{thirdId}" // URL with parameters 

     ); 

routes.MapRoute(
     "Dates",        // Route name 
     "{controller}/{action}/{startDate}/{endDate}"  // URL with parameters 

     ); 

嘗試做使用的東西像jQuery,而不是AJAX調用。沒有必要爲每種可能性添加路線。

$.ajax({ 
      url: '../' + controller + '/' + method, 
      data: jsonObjectString, 
      contentType: 'application/json', 
      dataType: 'json',    
      success: function (data) { 
       //do something 
      }, 
      error: function (err) { 
       //do something 
      } 
     }); 

您可以使用我的圖書館https://github.com/Biot-Savart/MVC-DataCall.js讓生活變得更輕鬆。