2016-03-02 26 views
0

写入一个控制器从另一个控制器的功能我有2个控制器的LoginController叫和RegisterController和函数“公共静态字符串加密(字符串toEncrypt,布尔useHashing)”在RegisterController.How定义我可以调用从LoginController相同?如何调用MVC

我使用var result= new RegisterController().Encrypt(newpass, true);代码,但结果为: 错误4成员'AP.WebApp.Controllers.RegisterController.Encrypt(string,bool)'无法通过实例引用进行访问;与类型名限定它,而不是

+1

注:通常它不是在一个控制器实用方法,并从另外一个使用它们好主意。它当然会起作用,但这不合逻辑,因为它不是仅用于该控制器的东西。通常使用静态方法表明它需要在别处。 –

+2

更好的做法是将所有的实用方法放在不同的类中 – Ian

回答

2

你可以用继承来解决这个问题。

例子:

public abstract class BaseController : Controller 
{ 
    //Common functionality between controllers go here 
    protected static string Encrypt(string toEncrypt, bool useHashing) 
    { 
     //Your content 
    } 
} 

public class LoginController : BaseController //not Controller anymore 
{ 
    //Encrypt is now available 

    //...Your controller methods here 
} 

public class RegisterController : BaseController //not Controller anymore 
{ 
    //Encrypt is now available 

    //...Your controller methods here 
} 
0

你的方法是寄存器控制器上静态的,所以你shold只要致电:

RegisterController.Encrypt(newpass,true); 

或删除方法静态关键词。

1

正如其他人所说,这不是好的设计从一个控制器到另一个共享的静态方法。

我建议你创建一个新的类,例如常见的,包含你的共享功能的定义。它可能看起来像:

public class MyCommonUtilities 
{ 
    public static string Encrypt(string ToEncrypt, bool useHashing) 
    { 
     // insert code here 
    } 
} 

如果你在一个单独的公共项目定义这一点,那么一定要包括这个类在这两个你的控制器(注意:如果您在相同的命名空间定义这个类不需要控制器)

using MyCommonUtilities; 

并在每个控制器中调用它需要它的地方。这将该方法集中到代码的一个常见部分,并使其可以始终与任何控制器一起使用。

0

我建议建立一个加密的类,它具有加密静态类。然后你可以从任何你想要的地方打电话给它。

0

这是不是从另一个调用控制器的一个方法好方法。为此创建了可以通过项目任何地方访问的公共类。 一个简单的解决方案是创建一个方法JsonResultRegisterController在方法中添加您的功能和计算。通过http WebRequest调用此方法。

0

我有一种方法,其中创建从控制器继承然后这个两个控制器将通过新创建的基本控制器,其具有共同的代码(加密),这样就可以在这两个控制器调用方法被继承的基座控制器。