调用控制器内部的void函数

时间:2018-01-11 12:56:17

标签: c# mysql asp.net-mvc

我有以下控制器:

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"在这种情况下是不允许的。有没有其他方法可以在这里调用我的功能,还是应该将整个连接(内部" xxx")放入我的控制器?

2 个答案:

答案 0 :(得分:5)

更改方法名称;

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");
}

答案 1 :(得分:5)

您的代码中存在多个问题。

首先,您不能将delete用作类名和成员名。说过这个delete对于一个班级来说是一个非常糟糕的名字。

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

最后也是最重要的,你需要一个你想要调用方法的类的实例:

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

如果您没有该课程的实例,您也可以delete成为static个实例。然后你可以在你的控制器中直接调用该方法:

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
    }

}