Je construis un site Web où il y a des produits et vous pouvez laisser des commentaires sur les produits. J'ai un lien sur la page du produit qui dit: « Laisser un avis »ActionLink et les paramètres
Dans mon code, il ressemble à ceci:
@Html.ActionLink("Leave a Review", "AddReview", "Product", new { id = Model.ProductId }, null)
Quand je lance mon application le lien fonctionne très bien, mais lorsque je soumets une critique il se bloque et dit:
Le dictionnaire des paramètres contient une entrée nulle pour le paramètre « id » de type non annulable « System.Int32 » pour la méthode « System.Web.Mvc.ActionResult produit (System.String , Int32) 'dans ' MyProject.Controllers.P roductController '. Un paramètre facultatif doit être un type de référence, un type Nullable ou être déclaré en tant que paramètre facultatif . Nom du paramètre: paramètres
Cette erreur se produit uniquement si j'ai new { id = Model.ProductId }
dans mon ActionLink.
Cela peut sembler que le ProductId est null, mais ce n'est pas possible. Pour charger la page du produit en premier lieu un ProductId est nécessaire, plus j'utiliser un RenderAction qui affiche des commentaires sur ce produit sur la page en utilisant le même identifiant:
@{Html.RenderAction("Reviews", "product", new { id = Model.ProductId});}
Donc, fondamentalement, pourquoi je reçois cette erreur ? Cela a-t-il quelque chose à voir avec une méthode GET et POST AddReview? Je ne pense pas qu'il devrait considérer le lien tirer l'EEG et quand je soumets le formulaire, il devrait être un POST. Comment puis-je obtenir le productId dans le formulaire?
EDIT Pour répondre à certaines questions:
Ma forme ressemble à ceci:
@using (Html.BeginForm("AddReview", "Product"))
{
<p>Title @Html.TextBoxFor(x => x.Title)</p>
<p>Rating: @Html.TextBoxFor(x => x.Rating)</p>
<p>Body: @Html.TextBoxFor(x => x.Body)</p>
<input type="submit" value="Save"/>
Html.ActionLink("Cancel", "Index", "Home");
}
Mon étiquette générée ressemble à ceci:
<a href="/Product/AddReview?ProductId=9">Leave a Review</a>
EDIT
Après avoir résolu le problème de lien, j'ai réalisé que la raison pour laquelle je recevais toujours une erreur était en raison d'un appel RedirectToAction a été rompu dans mon contrôleur. Quelle erreur stupide!
À quoi ressemble le code pour créer le formulaire? –
Comment la balise '' apparaît-elle dans le code HTML généré lorsque vous parcourez la source? –
J'ai ajouté les deux à mon message original. – Johannes