如何在mvc中调用另一个控制器在一个控制器中编写的函数

时间:2016-03-02 04:14:45

标签: c# asp.net-mvc

我有两个名为LoginController和RegisterController的控制器和一个函数'公共静态字符串Encrypt(string toEncrypt,bool useHashing)'在RegisterController中定义。如何从LoginController调用它?

我使用了var result= new RegisterController().Encrypt(newpass, true);代码但结果如下: 错误4成员' AP.WebApp.Controllers.RegisterController.Encrypt(string,bool)'无法使用实例引用访问;使用类型名称来限定它

6 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

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

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

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

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

using MyCommonUtilities;

并在每个控制器中将其调用到您需要的位置。这将方法集中到一个公共代码段中,并使其可以一致地用于任何控制器。

答案 2 :(得分:0)

你的方法在寄存器控制器上是静态的,所以你只需要调用:

RegisterController.Encrypt(newpass,true);

或从方法中删除静态关键字。

答案 3 :(得分:0)

我建议创建一个Encrypt类,它具有Encrypt静态类。然后你可以随心所欲地调用它。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我有一个方法,创建一个继承自Controller的基本控制器,然后这两个控制器将由新创建的基本控制器继承,它具有公共代码(加密),以便您可以在两个控制器中调用方法。