2016-06-16 2 views
1

Разработано расширенные методы, как показано ниже:Расширенные методы не показывающие в виду в MVC

public static class RBAC_ExtendedMethods 
    { 

     public static bool IsSysAdmin(this ControllerBase controller) 
     { 
      bool IsSysAdmin = false; 
      try 
      { 
       //Check if the requesting user has the System Administrator privilege... 
       IsSysAdmin = new RBACUser(System.Security.Principal.WindowsIdentity.GetCurrent().Name).IsSysAdmin; 
      } 
      catch { } 
      return IsSysAdmin; 
     } 
    } 

Возможность использовать этот метод в метод действия контроллера:

public ActionResult Index() 
     { 
      if (this.IsSysAdmin()) 
      { 

      } 
     } 

, но при использовании в виду не может см. его Использование: ViewContext:

@{ 
    if(ViewContext.Controller.) 
} 

ответ

0

Из того, что я могу сказать, используя методы расширения правильно, и они hould be avaialbe в представлении Razor, но то, что мы не видим, это если вы включили метод расширения в View.

Существует несколько способов включения метода расширения контроллера. Пространство имен метода расширения должно быть либо частью операторов using для представления, как показано ниже.

Примечание, как, которого не обеспечивают пространство имен я буду использовать MyCoolNamespace.ExtensionMethods в качестве пространства имен для метода расширения

Razor Посмотреть

Добавить, используя заявление, в самом представлении.

@using MyCoolNamespace.ExtensionMethods 

Web.config

Внутри web.config, расположенный в ~/Views/web.config добавить пространство имен в разделе system.web.webPages.razor/pages/namespaces, такие как.

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <!-- ommited --> 
     <add namespace="MyCoolNamespace.ExtensionMethods" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

Любой из этих двух способов позволит использовать метод расширения в ваших представлениях. Опция later позволяет использовать ее для всех видов, которые наследуются от пути web.config.

@{ 
    if (ViewContext.Controller.IsSysAdmin()) 
    { 
      //do something cool for sys admins 
    } 
} 
Смежные вопросы