Sie verwenden eine falsche Überlastung des Html.ActionLink
Helfers. Was Sie denken, routeValues
ist tatsächlich htmlAttributes
! Schauen Sie sich einfach den generierten HTML-Code an. Sie werden feststellen, dass die href-Eigenschaft dieses Ankers nicht so aussieht, wie Sie es erwarten.
Folgendes verwenden Sie:
@Html.ActionLink(
"Reply", // linkText
"BlogReplyCommentAdd", // actionName
"Blog", // routeValues
new { // htmlAttributes
blogPostId = blogPostId,
replyblogPostmodel = Model,
captchaValid = Model.AddNewComment.DisplayCaptcha
}
)
und hier ist, was Sie verwenden sollten:
@Html.ActionLink(
"Reply", // linkText
"BlogReplyCommentAdd", // actionName
"Blog", // controllerName
new { // routeValues
blogPostId = blogPostId,
replyblogPostmodel = Model,
captchaValid = Model.AddNewComment.DisplayCaptcha
},
null // htmlAttributes
)
Es gibt auch ein anderes sehr ernstes Problem mit Ihrem Code. Der folgende routeValue:
replyblogPostmodel = Model
Sie können solche komplexen Objekte unmöglich in einem ActionLink übergeben. Entfernen Sie es also und entfernen Sie den BlogPostModel
Parameter aus Ihrer Controller-Aktion. Sie sollten den blogPostId
Parameter verwenden, um das Modell von jedem Ort abzurufen, an dem dieses Modell beibehalten wird, oder wenn Sie es vorziehen, von jedem Ort aus, an dem Sie das Modell in der GET-Aktion abgerufen haben:
public ActionResult BlogReplyCommentAdd(int blogPostId, bool captchaValid)
{
BlogPostModel model = repository.Get(blogPostId);
...
}
In Bezug auf Ihr anfängliches Problem mit der falschen Überlastung würde ich Ihnen empfehlen, Ihre Helfer mit benannten Parametern zu schreiben:
@Html.ActionLink(
linkText: "Reply",
actionName: "BlogReplyCommentAdd",
controllerName: "Blog",
routeValues: new {
blogPostId = blogPostId,
captchaValid = Model.AddNewComment.DisplayCaptcha
},
htmlAttributes: null
)
Jetzt ist Ihr Code nicht nur besser lesbar, sondern Sie werden auch nie mehr Verwirrung über die Unmengen von Überladungen haben, die Microsoft für diese Helfer vorgenommen hat.
controllerName
undactionName