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不知道如何调用该方法。