C# ActionLink-指定控制器名称时的奇怪行为
我有以下扩展方法:C# ActionLink-指定控制器名称时的奇怪行为,c#,asp.net-mvc-4,extension-methods,actionlink,C#,Asp.net Mvc 4,Extension Methods,Actionlink,我有以下扩展方法: public static MvcHtmlString GenerateBodyCellContentFor( this HtmlHelper helper, Goal goal, GoalProperty property) { if (property == GoalProperty.Name) { return LinkExtensions.ActionLink(
public static MvcHtmlString GenerateBodyCellContentFor(
this HtmlHelper helper,
Goal goal,
GoalProperty property)
{
if (property == GoalProperty.Name)
{
return LinkExtensions.ActionLink(
helper,
goal.Name,
"Show",
new
{
goalId = goal.GoalId
});
}
// rest of the code irrelevant
}
这将按预期工作,并生成以下链接:
http://localhost:54913/Goal/Show?goalId=19013
由于某些情况,我现在需要显式指定控制器名称。因此,我将方法更改为以下内容:
public static MvcHtmlString GenerateBodyCellContentFor(
this HtmlHelper helper,
Goal goal,
GoalProperty property)
{
if (property == GoalProperty.Name)
{
return LinkExtensions.ActionLink(
helper,
goal.Name,
"Show",
"Goal", // the only change in code
new
{
goalId = goal.GoalId
});
}
// rest of the code irrelevant
}
结果,令我惊讶的是:
http://localhost:54913/Goal/Show?Length=4
我尝试了三次删除和添加控制器参数,因为我不相信这会发生。这是唯一的改变,它导致了这种行为
length参数等于controller name的长度(仅使用不同的字符串进行检查)
你知道可能发生了什么吗?作为解释,问题的原因是没有一个重载与我需要的方式匹配。此问题的最简单解决方案是:
return LinkExtensions.ActionLink(
helper,
goal.Name,
"Show",
"Goal",
new
{
goalId = goal.GoalId
},
null);
这个问题和这个类似,那个电话和哪个相匹配?看起来不合适。@DGibbs确实,没有重载按照我想要的方式来拟合参数。@Lasooch这可能会解释
长度的来源。@sqladmin这很有帮助,谢谢。我会回答这个问题,以防有人找到它,而不是你链接的那个。