MVC行动中的神秘长度参数

时间:2013-11-21 15:53:38

标签: c# asp.net-mvc asp.net-mvc-3 razor

错误地我在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来自哪里?

2 个答案:

答案 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”。