您正在使用错误的
Html.ActionLink助手的过载。你认为routeValues实际上是htmlAttributes!只要看看生成的HTML,你会看到这个锚的href属性看起来不像你期望它看起来。
这里是你使用:
@Html.ActionLink(
"Reply", // linkText
"BlogReplyCommentAdd", // actionName
"Blog", // routeValues
new { // htmlAttributes
blogPostId = blogPostId,
replyblogPostmodel = Model,
captchaValid = Model.AddNewComment.DisplayCaptcha
}
)
这里是你应该使用:
@Html.ActionLink(
"Reply", // linkText
"BlogReplyCommentAdd", // actionName
"Blog", // controllerName
new { // routeValues
blogPostId = blogPostId,
replyblogPostmodel = Model,
captchaValid = Model.AddNewComment.DisplayCaptcha
},
null // htmlAttributes
)
还有另一个非常严重的问题,你的代码。以下routeValue:
replyblogPostmodel = Model
你不能在ActionLink中传递这样的复杂对象。所以摆脱它,并从你的控制器动作中删除BlogPostModel参数。您应该使用blogPostId参数从此模型持久化的位置检索模型,或者如果您喜欢从GET操作中检索模型的位置:
public ActionResult BlogReplyCommentAdd(int blogPostId, bool captchaValid)
{
BlogPostModel model = repository.Get(blogPostId);
...
}
至于你的初始问题是关于错误的重载,我建议你使用命名参数编写你的助手:
@Html.ActionLink(
linkText: "Reply",
actionName: "BlogReplyCommentAdd",
controllerName: "Blog",
routeValues: new {
blogPostId = blogPostId,
captchaValid = Model.AddNewComment.DisplayCaptcha
},
htmlAttributes: null
)
现在,不仅你的代码更加可读,但你永远不会混淆在微软为这些帮助重载的gazillions。