C# 在控制器内部调用void函数

C# 在控制器内部调用void函数,c#,mysql,asp.net-mvc,C#,Mysql,Asp.net Mvc,我有以下控制器: public ActionResult delete(int id) { //call function return RedirectToAction("Index"); } public ActionResult delete(int id) { DeleteClass.Delete(id); return RedirectToAction("Index"); } public class DeleteCl

我有以下控制器:

public ActionResult delete(int id)
    {
        //call function
        return RedirectToAction("Index");
    }
public ActionResult delete(int id)
{
    DeleteClass.Delete(id);
    return RedirectToAction("Index");
}

public class DeleteClass
{
    public static void Delete(int id)
    {
        //xxx
        const string ConnStr = "...";

        MySqlConnection connection = new MySqlConnection(ConnStr);
        connection.Open(); 
        MySqlCommand sqlcmd2;
        sqlcmd2 = connection.CreateCommand();
        sqlcmd2.CommandText = "UPDATE `user` SET Aktive = 0 WHERE Nr = @id;";

        sqlcmd2.Parameters.Add("@id", MySqlDbType.Int32).Value = id;

        sqlcmd2.ExecuteNonQuery();

        connection.Close();
        //xxx
    }

}
在这里,我想从我的模型中调用以下函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;

namespace project1.Models.Admin
{
public class delete
{
    public void delete(int id)
        {
        //xxx
        const string ConnStr = "...";

        MySqlConnection connection = new MySqlConnection(ConnStr);
        connection.Open(); 
        MySqlCommand sqlcmd2;
        sqlcmd2 = connection.CreateCommand();
        sqlcmd2.CommandText = "UPDATE `user` SET Aktive = 0 WHERE Nr = @id;";

        sqlcmd2.Parameters.Add("@id", MySqlDbType.Int32).Value = id;

        sqlcmd2.ExecuteNonQuery();

        connection.Close();
        //xxx
    }

}
}
我得到一个错误,在这个上下文中不允许void。有没有其他方法可以在这里调用我的函数,或者我应该把xxx中的整个连接放到我的控制器中

更改方法名称

public void deleteFunc(int id)
编辑

首先,您应该注意命名约定。我更改您的类名,如DeleteAction和方法名DeleteRecord

然后,您可以通过从类创建实例来调用所需的函数

public ActionResult delete(int id)
{
    var deleteActionObject = new DeleteAction();
    deleteActionObject.DeleteRecord(id);
    return RedirectToAction("Index");
}
更改方法名称

public void deleteFunc(int id)
编辑

首先,您应该注意命名约定。我更改您的类名,如DeleteAction和方法名DeleteRecord

然后,您可以通过从类创建实例来调用所需的函数

public ActionResult delete(int id)
{
    var deleteActionObject = new DeleteAction();
    deleteActionObject.DeleteRecord(id);
    return RedirectToAction("Index");
}

代码中有几个问题

首先,不能将delete同时用作类名和成员名。尽管如此,这种删除对于一个类来说是一个非常糟糕的名字

其次,您应该遵循命名约定,例如,对方法和类都使用PascalCase名称

最后也是最重要的一点,您需要类的一个实例,您希望调用该类的方法:

public ActionResult delete(int id)
{
    myInstanceOfDeleteClass.delete(id);
    return RedirectToAction("Index");
}
如果您没有该类的实例,还可以将delete设置为静态。然后您可以直接在控制器内调用该方法:

public ActionResult delete(int id)
    {
        //call function
        return RedirectToAction("Index");
    }
public ActionResult delete(int id)
{
    DeleteClass.Delete(id);
    return RedirectToAction("Index");
}

public class DeleteClass
{
    public static void Delete(int id)
    {
        //xxx
        const string ConnStr = "...";

        MySqlConnection connection = new MySqlConnection(ConnStr);
        connection.Open(); 
        MySqlCommand sqlcmd2;
        sqlcmd2 = connection.CreateCommand();
        sqlcmd2.CommandText = "UPDATE `user` SET Aktive = 0 WHERE Nr = @id;";

        sqlcmd2.Parameters.Add("@id", MySqlDbType.Int32).Value = id;

        sqlcmd2.ExecuteNonQuery();

        connection.Close();
        //xxx
    }

}

代码中有几个问题

首先,不能将delete同时用作类名和成员名。尽管如此,这种删除对于一个类来说是一个非常糟糕的名字

其次,您应该遵循命名约定,例如,对方法和类都使用PascalCase名称

最后也是最重要的一点,您需要类的一个实例,您希望调用该类的方法:

public ActionResult delete(int id)
{
    myInstanceOfDeleteClass.delete(id);
    return RedirectToAction("Index");
}
如果您没有该类的实例,还可以将delete设置为静态。然后您可以直接在控制器内调用该方法:

public ActionResult delete(int id)
    {
        //call function
        return RedirectToAction("Index");
    }
public ActionResult delete(int id)
{
    DeleteClass.Delete(id);
    return RedirectToAction("Index");
}

public class DeleteClass
{
    public static void Delete(int id)
    {
        //xxx
        const string ConnStr = "...";

        MySqlConnection connection = new MySqlConnection(ConnStr);
        connection.Open(); 
        MySqlCommand sqlcmd2;
        sqlcmd2 = connection.CreateCommand();
        sqlcmd2.CommandText = "UPDATE `user` SET Aktive = 0 WHERE Nr = @id;";

        sqlcmd2.Parameters.Add("@id", MySqlDbType.Int32).Value = id;

        sqlcmd2.ExecuteNonQuery();

        connection.Close();
        //xxx
    }

}

不能在具有该名称的类中使用delete。尽管如此,这种删除对于一个类来说是一个非常糟糕的名字。因此,您应该遵循命名约定,例如,方法和类都使用PascaleCase名称。@HimBromBeere我的第一语言不是英语,因此为了更好地理解,我更改了英语名称。不过还是要感谢你知道这件事。我的也不知道,我想这里只有少数人会说英语。无论如何,这些约定的存在是有充分理由的。@HimBromBeere我指的是我的类、函数,。。。你不是用英语写的。我只是在我的问题中改变了它,这样你们可能会更好地理解它。但还是要谢谢。您不能在具有该名称的类中使用delete。尽管如此,这种删除对于一个类来说是一个非常糟糕的名字。因此,您应该遵循命名约定,例如,方法和类都使用PascaleCase名称。@HimBromBeere我的第一语言不是英语,因此为了更好地理解,我更改了英语名称。不过还是要感谢你知道这件事。我的也不知道,我想这里只有少数人会说英语。无论如何,这些约定的存在是有充分理由的。@HimBromBeere我指的是我的类、函数,。。。你不是用英语写的。我只是在我的问题中改变了它,这样你们可能会更好地理解它。但是还是要谢谢。在控制器中调用函数的正确方法是什么?这个答案只处理明显的语法问题,而不是实际问题,OP不知道如何调用方法。在控制器中调用函数的正确方法是什么?这个答案只处理明显的语法问题,而不是实际问题,该OP不知道如何调用该方法。