0

Wir haben ein [UserNameFilter] ActionFilterAtrribute, das den User-Parameter für die Controller-Aktionen auffüllt. Das funktioniert gut. Wenn ich den Html.ActionLink-Helper jedoch stringly zum Controller eingegeben habe, fordert der Compiler den Benutzernamen-Parameter in der Ansicht an.ActionFilter zum Festlegen eines controller.action -Parameters aber param req auf ActionLink in View

Hat jemand darüber gestolpert und weiß, wie man rezitiert?

Controller Aktion:

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

-Code in Aussicht:

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

Antwort

0

Dies ist ein Fehler der Kompilierung ist - C# Compiler weiß nichts von Ihrer Anwendung, MVC oder Action Sie verwenden, so kann es nicht möglicherweise wissen, wie man den userName-Parameter füllt.

Auf Art und Weise ich von jetzt denken kann, ist eine neue Aktion in der Steuerung

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

und verwendet, die aus Ihrer Sicht zu erklären.

Wenn Sie den Benutzernamen in der Ansicht gelangen Sie, dass auf Ihrem aktuellen Kategorie Aktion liefern könnte:

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

oder wenn Sie Benutzernamen in das Modell setzen können:

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

Yep, ein muss eine überladene Stub-Aktion im Controller deklarieren. Was ich getan habe, ist, den Stub so zu deklarieren, dass er mit der Instanz übereinstimmt, für die es keinen Parameter für den Benutzernamen gibt, daher erhalten wir eine saubere Kompilierung. Ich habe dann diese überladene Aktion wie dargestellt dekoriert, um sicherzustellen, dass sie nie aufgerufen wird. Jetzt ist alles gut.

Beifall für die Antwort Robert

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