2016-03-10 9 views
6

Ich habe gesucht, aber ich habe keine Möglichkeit gefunden, ein leeres IViewComponentResult zurückzugeben. Der einzige Weg, wie ich es geschafft habe, ist die Rückgabe einer leeren Ansicht. Gibt es einen besseren Weg? Dies ist mein Code:Wie wird eine leere Viewkomponente MVC 6 zurückgegeben?

Eine Ausnahme vom Typ 'System.InvalidCastException' aufgetreten in aber nicht

Weitere Informationen im Benutzercode behandelt:

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

Dies ist die Ausnahme : Kann Objekt des Typs "Microsoft.AspNet.Mvc.EmptyResult" nicht umwandeln, um "Microsoft.AspNet.Mvc.IViewComponentResult" einzugeben.

Ich habe null zurück versucht, aber das wird auch nicht funktionieren. Irgendwelche Ideen? bearbeitet es wie folgt funktionieren:

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); 
    } 
} 

Antwort

0

Eine Eigenschaft kann von einer Schnittstelle erbt nicht darauf werfen.

Versuchen Sie, ein Objekt erstellen, die von IViewComponentResult erbt.

public class xyz: IViewComponentResult 
{ 
    // todo 
} 

dann dieses Objekt zurückgeben. Es sollte funktionieren.

8

Sie können folgendes tun:

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

    return Content(string.Empty); 
} 
Verwandte Themen