【问题标题】:Call void function inside of controller在控制器内部调用 void 函数
【发布时间】:2018-06-20 19:36:07
【问题描述】:

我有以下控制器:

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”内)放入我的控制器中?

【问题讨论】:

  • 您不能在具有该名称的类中使用delete。话虽如此,delete 对于一个班级来说是一个非常糟糕的名字。从这里开始,您应该遵循命名约定,例如对方法和类都使用 PascaleCase 名称。
  • @HimBromBeere 我的第一语言不是英语,所以为了更好地理解,我用英语更改了名称。但仍然感谢知道的好东西。
  • 我的也没有,我猜这里只有少数人会说英语。无论如何,这些约定的存在是有充分理由的。
  • @HimBromBeere 我的意思是我的类、函数、......不是英文的名字。我只是在我的问题中改变了它,所以你们可能会更好地理解它。但还是谢谢。

标签: c# mysql asp.net-mvc


【解决方案1】:

更改方法名称;

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

【讨论】:

  • 控制器中调用函数的正确方法是什么?
  • 该答案仅处理明显的(句法)问题,而不是 实际 问题,OP 不知道如何调用该方法。
【解决方案2】:

你的代码有几个问题。

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

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

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

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
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多