在视图中调用控制器方法我在VisualStudio中有一个asp.netcore应用程序。在自动创建的视图(Events/index.cshtml)中,我想从EventsController.cs中调用此方法publicBooleanIsInRole(stringRole){BooleanroleMembership=false;if(HttpContext.Session.GetInt32("ID")!=null){if(HttpContext.Session.GetString("Role")==Role){roleMembership=true;}}返回角色成员资格;我的想法是在视图的顶部调用这个方法@if(IsInRole("Admin")){showsomecontent}我怎样才能完成这个任务?您可以将该逻辑移动到一个单独的类中。由于此代码使用HttpContext.Session,因此最好为您的类创建一个接口并将此类的HttpContext.Session作为您的具体实现。您可以使用依赖注入框架在控制器或视图中注入所需的实现。公共接口IUserAccessHelper{boolIsInRole(stringrole);}publicclassUserAccessHelper:IUserAccessHelper{privatereadonlyIHttpContextAccessorhttpContextAccessor;publicUserAccessHelper(IHttpContextAccessorhttpContextAccessor){this.httpContextAccessor=httpContextAccessor;}publicBooleanIsInRole(stringrole){BooleanroleMembership=false;if(httpContextAccessor.HttpContext.Session.GetInt32("ID")!=null){if(httpContextAccessor.HttpContext.Session.GetString("Role")==role){roleMembership=true;}}返回角色成员资格;现在确保在Startup.csservices.AddTransient()的ConfigureServices方法中注册它;现在在剃须刀视图中,您可以注入此依赖项。是的,DI现在可以在视图中:)@injectIUserAccessHelperUserAccessHelper@if(UserAccessHelper.IsInRole("SomeRole")){InRole}else{NotinRole}您可以通过构造函数注入IUserAccessHelper在控制器中注入相同的内容。publicclassHomeController:Controller{privatereadonlyIUserAccessHelperuserAccessHelper;publicHomeController(IUserAccessHelperuserAccessHelper){this.userAccessHelper=userAccessHelper;}publicActionResultCreate(){//你可以使用this.userAccessHelper.IsInRole("abc")//来做:returnsomething}}由于你通过依赖注入注入了所需的实现,你现在可以对控制器方法进行单元测试。您的控制器代码现在与HttpContext没有任何紧密耦合。您可以为单元测试创??建MockUserAccessHelper(没有HttpContext)并根据需要使用它。由于这是一个不特定于任何控制器的通用方法,因此它被移到了一个单独的类中。然后,您可以使用@using指令在视图中引用类的命名空间(几乎与.cs文件中的完全相同),并调用该方法。以上就是C#学习教程:在视图中调用控制器方法全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
