2010-01-08 62 views
30

使用提供的默認路由,我不得不命名我的參數「id」。這對很多控制器操作都很好,但我想在某些地方使用一些更好的變量命名。是否有某種屬性可以使用,以便我的動作簽名中可以包含更多有意義的變量名稱?動作參數命名

// Default Route: 
routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

// Action Signature: 
public ActionResult ByAlias(string alias) 
{ 
    // Because the route specifies "id" and this action takes an "alias", nothing is bound 
} 

回答

48

使用[綁定]屬性:

public ActionResult ByAlias([Bind(Prefix = "id")] string alias) { 
    // your code here 
} 
+1

這是使用綁定的最好的例子,我找到了!有沒有辦法讓這個模型屬性的工作?即代替具有字符串參數的方法簽名,它具有一個類作爲具有如下所示的屬性的參數:'[Bind(Prefix =「id」)] string Alias {get;設置;}'?這個例子不編譯...我怎麼修改它來編譯(也是工作)? – 2011-09-08 17:00:18

0

這仍然有效,您的查詢字符串將只是看起來像 「/控制器/ ByAlias?別名=東西」。

+0

我猜你說,如果我已經實際使用Html.ActionLink仍然作品意義創建我的鏈接,然後它會創建一個URL,正如你所描述的...如果我沒有這樣做,只是擊中URL/Controller/ByAlias/aliashere - 我可以以某種方式將字符串別名參數綁定到「 id「片段定義在路由中? – Langdon 2010-01-08 20:59:07

+0

在我的MVC版本上,這沒有奏效。它嚴格地期望/ {id} - 無法提供?alias = val – mmcrae 2017-12-24 03:40:52

0

您可以自定義你喜歡什麼標識的路線..

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{alias}",       // URL with parameters 
    new { controller = "Home", action = "Index", alias = "" } // Parameter defaults 
); 

編輯:Here's an overview from the ASP.NET site

+0

我當然可以,但是如果我仍然希望原始/ Home/Index/id起作用,我無法很好地定義/ Home/Index/alias權限之後,並期望它會受到打擊。 – Langdon 2010-01-08 21:04:54

0

僅僅因爲你的路由使用的ID變量名「身份證」並不意味着您必須在控制器操作方法中使用相同的名稱。

例如,假設該控制器方法...

public Controller MailerController 
{ 
    public ActionResult Details(int mailerID) 
    { 
     ... 
     return View(new { id = mailerID }); 
    } 
} 

...並從視圖這個動作方法調用...

<%= Html.ActionLink("More Info", "Details", new { mailerID = 7 }) %> 

...你可以使用任何命名您希望在控制器操作方法中使用ID參數。你所需要做的就是將新名稱解析爲默認值,不管它是「id」,「alias」還是其他。

上面的例子應該下定決心:

<a href="/Mailer/Details/7">More Info</a> 
+2

對我來說(在MVC 1.0中)如果我點擊/ Mailer/Details/7,mailerID將始終爲空。只要我將int mailerID更改爲int id(按照Route),它可以正常工作。 – Langdon 2010-01-08 21:56:55

+3

使用'id'可以讓你概括你的路線。如果沒有這個,你需要一個路徑來處理id的每個命名變體。 – 2010-04-14 22:41:28