2016-03-10 10 views
6

Szukałem, ale nie znalazłem żadnego sposobu, aby zwrócić pusty IViewComponentResult. Jedynym sposobem, w jaki udało mi się to zrobić, jest zwrócenie pustego widoku. Czy istnieje lepszy sposób? To jest mój kod:Jak zwrócić pusty widok komponentu MVC 6?

public class ClientNavigationViewComponent : ViewComponent 
{ 
    public IViewComponentResult Invoke() 
    { 
     return User.IsInRole(UserRoles.CLIENT) 
      ? View("_ClientMenu") 
      : (IViewComponentResult)new EmptyResult(); 
    } 
} 

Jest to wyjątek:

Wyjątek typu „System.InvalidCastException” wystąpił w ale nie było obsługiwane w kodzie użytkownika

dodatkowe informacje : Nie można rzucić obiektu typu "Microsoft.AspNet.Mvc.EmptyResult", aby wpisać "Microsoft.AspNet.Mvc.IViewComponentResult".

Próbowałem zwrócić wartość null, ale to też nie zadziała. Jakieś pomysły? EDIT Wykonane to działa tak:

public class ClientNavigationViewComponent : ViewComponent 
{ 
    public IViewComponentResult Invoke() 
    { 
     if (User.IsInRole(UserRoles.CLIENT)) 
      return View("_ClientMenu"); 
     return new EmptyViewComponent(); 
    } 
} 

public class EmptyViewComponent : IViewComponentResult 
{ 
    public void Execute(ViewComponentContext context) 
    { 
    } 

    public Task ExecuteAsync(ViewComponentContext context) 
    { 
     return Task.FromResult(0); 
    } 
} 

Odpowiedz

0

Właściwość może dziedziczyć z interfejsu nie oddanych do niego.

Spróbuj utworzyć obiekt, który dziedziczy po obiekcie IViewComponentResult.

public class xyz: IViewComponentResult 
{ 
    // todo 
} 

następnie zwróć ten obiekt. Powinno działać.

8

można wykonać następujące czynności:

public IViewComponentResult Invoke() 
{ 
    if (User.IsInRole(UserRoles.CLIENT)) 
    return View("_ClientMenu"); 

    return Content(string.Empty); 
}