您正在使用BlogPostModel帮助程序的错误重载。 你认为BlogPostModel实际上是blogPostId! 只需查看生成的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
)
现在,不仅你的代码更具可读性,而且你永远不会在微软为这些帮助者做出的重载之间产生混淆。