我有以下控制器:
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")放入我的控制器?
答案 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
}
}