0

У нас есть [UserNameFilter] ActionFilterAtrribute, который заполняет параметр имени пользователя для действий контроллера. Это хорошо работает. Однако, когда я использую хелпер Html.ActionLink, строчно введенный в контроллер, компилятор запрашивает упомянутый параметр имени пользователя в представлении.ActionFilter, чтобы установить параметр controller.action, но param req в ActionLink в представлении

Кто-нибудь сталкивался с этим и знал, как его повторять? Действие

Контроллер:

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

Код в Вид:

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

ответ

0

Это время компиляции ошибка - 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)) %> 
0

Yep, один должен объявить перегруженное действие заглушки в контроллере. То, что я сделал, объявляет, что заглушка соответствует экземпляру, где нет параметра для userName, поэтому мы получаем чистый компилятор. Затем я украсил это перегруженное действие, как показано, чтобы убедиться, что он никогда не называется. Теперь все хреново.

Приветствия для ответа Роберт

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