2016-03-10 12 views
6

私は検索しましたが、空のIViewComponentResultを返す方法が見つかりませんでした。私がそれを行うことができた唯一の方法は、空のビューを返すことです。より良い方法がありますか? これは私のコードです:空のビューコンポーネントを返す方法MVC 6?

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

これは例外である:

型「System.InvalidCastExceptionの」の例外がで発生したが、ユーザーコード

追加情報では処理されませんでした: 'Microsoft.AspNet.Mvc.EmptyResult'型のオブジェクトをキャストして 'Microsoft.AspNet.Mvc.IViewComponentResult'と入力できません。

nullを返そうとしましたが、それも機能しません。何か案は? EDITは、それはこのように動作製:

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

答えて

0

プロパティがそれにキャストいないインターフェースを継承することができます。

IViewComponentResultから継承するオブジェクトを作成してみてください。

public class xyz: IViewComponentResult 
{ 
    // todo 
} 

このオブジェクトを返します。それは動作するはずです。

8

次の操作を行うことができます

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

    return Content(string.Empty); 
} 
関連する問題