在控制器内部调用void函数

xyhw6mcr  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(245)

我有以下控制器:

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

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

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”在这个上下文中是不允许的。有没有其他方法在这里调用我的函数,或者我应该把整个连接(在“”内)放到我的控制器中?

20jt8wwn

20jt8wwn1#

代码中有几个问题。
首先你不能使用 delete 作为类名和成员名。说到这里 delete 对一个班级来说是个很坏的名字。
其次,您应该遵循命名约定,例如,对方法和类都使用pascalcase名称。
最后也是最重要的一点,您需要类的一个示例,您要调用该示例的方法:

public ActionResult delete(int id)
{
    myInstanceOfDeleteClass.delete(id);
    return RedirectToAction("Index");
}

如果你不´如果没有该类的示例,您还可以 deletestatic 一个。然后可以直接调用控制器中的方法:

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
    }

}
bksxznpy

bksxznpy2#

更改方法名称;

public void deleteFunc(int id)

编辑
首先,您应该注意命名约定。我把你的班名改成 DeleteAction 和方法名称 DeleteRecord ```
public class DeleteAction
{
public void DeleteRecord(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
}

}

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

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

相关问题