2

我創建了一個接觸器與簽名:asp.net核心和ASP路由-ID

public IActionResult Index(string id) 

沒有在路由表中看中:

app.UseMvc(routes => 
{ 
    routes.MapRoute(
    name: "default", 
    template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

在我家認爲,我試圖創建一個鏈接到聯繫人/索引:

<a asp-controller="Contact" asp-route-id="3255">Contact me</a> 

生成的鏈接看起來很好,並進行正確的操作。 帶或不帶asp的動作,生成的鏈接是:

<a href="/Contact/Index/3255">Contact me</a> 

但ID沒有設定。 但是當我複製鏈接並執行「粘貼並轉到」時,將設置id參數。 它也適用於如果我查看頁面源並單擊生成的鏈接。 當我點擊頁面上的鏈接時,它不起作用。

你能告訴我有什麼問題嗎?

回答

3

由於配置的路由,

路線需要包括action

<a asp-controller="Contact" 
    asp-action="Index" 
    asp-route-id="3255">Contact me</a> 

這應該產生

<a href="/Contact/Index/3255">Contact me</a> 
+0

但我們有默認操作:指數? – Alexan

+1

您的默認操作**不是可選**。它只會在你打電話給/聯繫人時設置,而不是在你/ Concact/1時設置,因爲現在第二個參數將被視爲操作。並沒有稱爲「1」的行爲。但是你的路線告訴它從** 3rd **參數中獲取id。不要混淆**可選**和**默認值** – Tseng

+0

@isthat:如果你的id有一個約束(即guid,int),你可以使用'routes.MapRoute(name:「noAction」,template:「{控制器=主頁}/{id:int}「,默認值:{action:」Index「});',但字符串id不起作用,因爲它也會匹配/ Contact/Edit,你會得到」Edit 「作爲id代替。 – Tseng