0

Nous avons un [UserNameFilter] ActionFilterAtrribute qui remplit le paramètre username du contrôleur actions. Cela fonctionne bien. Toutefois, lorsque j'utilise l'helper Html.ActionLink typé de manière dynamique sur le contrôleur, le compilateur demande le paramètre nom d'utilisateur dans la vue.ActionFilter pour définir un paramètre controller.action mais param req sur ActionLink dans la vue

Est-ce que quelqu'un a rencontré cela et sait comment recitery?

action Contrôleur:

[UserNameFilter] 
public ActionResult Category(int categoryId, int page, string userName) 

code dans Voir:

<%= Html.RenderTree(ViewData.Model, i => Html.ActionLink<ProductController>(pc => 
    pc.Category(i.CategoryId, 1, **Complier error here**),i.CategoryName)) %> 

Répondre

0

Ceci est une erreur de compilation - compilateur C# sait rien de votre application, MVC ou ActionFilter vous l'utilisez ne peut donc pas sait peut-être comment remplir le paramètre userName.

Sur le chemin, je peux penser est en ce moment de déclarer une nouvelle action dans le contrôleur

public ActionResult CategoryNoUser(int categoryId, int page) 
{ 
    string userName = ""; /* get username here same way you do in action filter */ 
    return Category(categoryId, page, userName); 
} 

et l'utiliser dans votre vue.

Si vous pouvez accéder au nom d'utilisateur dans la vue que vous pouvez fournir que votre action en cours Catégorie:

<%= Html.RenderTree(ViewData.Model, i => Html.ActionLink<ProductController>(pc => 
    pc.Category(i.CategoryId, 1, CurrentUser.UserName),i.CategoryName)) %> 

ou si vous pouvez mettre le nom d'utilisateur dans le modèle:

<%= Html.RenderTree(ViewData.Model, i => Html.ActionLink<ProductController>(pc => 
    pc.Category(i.CategoryId, 1, Model.UserName),i.CategoryName)) %> 
0

Eh oui, un doit déclarer une action de surcharge surchargée dans le contrôleur. Ce que j'ai fait est de déclarer que le stub correspond à l'instance où il n'y a pas de paramètre pour userName, donc nous obtenons une compilation propre. J'ai ensuite décoré cette action surchargée comme illustré pour m'assurer qu'elle ne soit jamais appelée. Maintenant, tout est Hunky Dory.

Vive la réponse Robert

[ActionName("UNCALLABLE")] 
    public ActionResult Category(int categoryId, int page) 
    { 
     return View(); 
    } 
Questions connexes