我有以下HTML:使用Html.ActionLink與RouteValues
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
這是正在呈現爲:
<a href="/Product/Details?ProductId=1">My Product Name</a>
然而,當我點擊這個,我得到以下錯誤:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'MyProject.Controllers.ProductController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
看起來我的路由不喜歡「?ProductId = 1」查詢字符串。
如果我使用來代替:
<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%>
我得到呈現以下鏈接:
<a href="/Product/Details/1">My Product Name</a>
...並點擊時這正常工作。
我在這裏錯過了一些基本的東西嗎?我想使用RouteValues,但我不明白爲什麼會拋出這個錯誤。我怎樣才能讓我的Controller方法接受查詢字符串參數?
唯一的路由映射我是:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
或...如果我添加一個 「id =」 到RouteValues參數: <%= Html.ActionLink(item.ProductName, 「詳細信息」, 「產品」,新{ID = item.ProductId}, null)%> 然後,我得到以下鏈接: My Product Name ......這也有效! – seanfitzg
@seanfitzg,你是對的,但我想你不希望你所有的參數名稱都是「Id」... – gdoron