2014-09-29 95 views
0

我想通過url傳遞參數給ASP.NET MVC控制器。我第一次使用自定義路線,我不確定是否缺少某些東西。MVC傳遞參數不起作用

這裏是我打電話的網址:

http://localhost:2053/agent-edit/?id=12 

這裏是我的自定義網址:

routes.MapRoute(name: "agent", url: "agent", defaults: new { controller = "Agents", action = "Index" }); 
routes.MapRoute(name: "agent-add", url: "agent-add", defaults: new { controller = "Agents", action = "Add" }); 
routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { controller = "Agents", action = "Edit" }); 

,這裏是我的我的位指示:

public ActionResult Edit(int id) 
{ 
     bla_Agent Agent = bla_Agent.getSingleAgent(id); 
     return View(Agent); 
} 

我可以導航到所有我的其他網址罰款,只是當我試圖發送一個ID似乎不工作。 Chrome Console中出現404找不到的錯誤。在添加{id}之前,我還可以完美地導航到網址,以便視圖正常工作。

在此先感謝。

+2

如果定義了'代理編輯/ {ID}'您的網址模板,你應該調用它是這樣的:通過'http://本地主機: 2053 /劑編輯/ 12' – 2014-09-29 05:56:37

回答

0

嘗試作爲最後途徑:

routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { 
    controller = "Agents", 
    action = "Edit", 
    id = UrlParameter.Optional 
}); 
0

如果你想打電話給你的動作,如:http://localhost:2053/agent-edit/?id=12

那麼你已經到了最後的路線更改爲:

routes.MapRoute(name: "agent-edit", url: "agent-edit", defaults: new { controller = "Agents", action = "Edit" }); 
0

http://localhost:2053/agent-edit/?id=12是不工作,因爲它與您在路線中指定的模式不匹配。因此,它應該類似http://localhost:2053/agent-edit/12,因爲控制器期望在路線末尾添加一個Id。 此外,如果你希望ID是可選的請嘗試使用:

public ActionResult Edit(int? id){ 
} 
0

如Marc_s在評論中說。當你有你的路線爲

routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { controller = "Agents", 
action = "Edit" }); 

然後,你不需要調用URL與查詢參數。你可以簡單地做

http://localhost:2053/agent-edit/12 

原因是12將作爲路由值,然後將其傳遞到您正在callling到從控制器

在你的情況下,它是

相應的動作
public ActionResult Edit(int id) 
{ 
    bla_Agent Agent = bla_Agent.getSingleAgent(id); 
    return View(Agent); 
} 

,所以你只需要調用它像http://localhost:2053/agent-edit/12

是,如果你逝去的另一個值AgentName。然後,你必須通過查詢字符串可能

http://localhost:2053/agent-edit/12?AgentName=ABC

通過它,您的控制器將

public ActionResult Edit(int id,string AgentName) 
{ 
    bla_Agent Agent = bla_Agent.getSingleAgent(id); 
    return View(Agent); 
} 

現在它是如何工作的原因是他們的方式你的路線地圖中的路線配置。您在路由配置中聲明的路由期望{id}作爲路由值,因此它可以作爲尾部斜槓傳遞。但在AgentName的情況下。它在Route值參數中沒有提及。所以它會作爲帶有querystring鍵值對的url的查詢字符串傳遞。不像僅路由值爲Id

我希望它應該清楚讓你瞭解