错误地我在ActionLink
中使用了错误的构造函数:
@Html.ActionLink("Show Customer", "Load", "Customer", new {Model.Id });
错误是,最后一个参数的类型为htmlAttributes
,而不是routeValues
(如预期的那样)。所以正确的构造函数应该是:
@Html.ActionLink("Show Customer", "Load", "Customer", new {Model.Id }, null);
所以我不需要解决这个问题......我只是想知道,当我使用错误的构造函数时,我的routeValue必须被解释为htmlAttribute
。
我很惊讶它导致length
- 参数。生成的代码是:
/客户/负载?长度= 7
只是出于好奇:length=7
来自哪里?
答案 0 :(得分:5)
这是ActionLink的重载,它正在被击中:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes);
所以你唯一的路由值是字符串,控制器名称,“Customer”,它有公共属性Length,8个符号。而routeValues正在挑选对象的所有公共属性,并将其传递给它。
值得一提的是,您的链接将收到html属性Id ='whatever_id_model_holds',因为第4个参数已映射到htmlAttributes。
答案 1 :(得分:2)
来自https://stackoverflow.com/a/4360565/7720
ActionLink覆盖您正在使用匹配(字符串linkText,字符串actionName,Object routeValues,Object htmlAttributes)覆盖。因此,您的“Customer”值将传递给routeValues参数。此函数关于此参数的行为是获取其上的所有公共属性,并将其添加到用于生成链接的路由值列表中。由于String只有一个公共属性(Length),因此最终会得到“length = 7”。