Это ошибка времени компиляции - компилятор C # ничего не знает о вашем приложении, MVC или ActionFilter, которые вы используете, поэтому он не может знать, как заполнить параметр userName.
На пути, который я сейчас могу придумать, это объявить новое действие в контроллере
public ActionResult CategoryNoUser(int categoryId, int page)
{
string userName = ""; /* get username here same way you do in action filter */
return Category(categoryId, page, userName);
}
и используйте это по вашему мнению.
Если вы можете получить доступ к имени пользователя в представлении, вы можете указать его для текущего действия в категории:
<%= Html.RenderTree(ViewData.Model, i => Html.ActionLink<ProductController>(pc =>
pc.Category(i.CategoryId, 1, CurrentUser.UserName),i.CategoryName)) %>
или, если вы можете указать имя пользователя в модели:
<%= Html.RenderTree(ViewData.Model, i => Html.ActionLink<ProductController>(pc =>
pc.Category(i.CategoryId, 1, Model.UserName),i.CategoryName)) %>