我想用M V C模式创建一个小项目,我想将我的代码分为三部分。
我在一个部分中使用了模型,在另一部分中使用了控制器,但是现在我也想分离控制器。
这是从事件开始的,现在我想在控制器中使用它,只需在这里调用它即可:
public void button1_Click(object sender, EventArgs e)
{
try
{
string query = "Select * from [UserTbl] where username='" + txtusername.Text + "' and password='" + txtpassword.Text + "'";
DBConnect db = new DBConnect();
DataTable dt = db.GetData(query);
if (dt.Rows.Count > 0)
{
MessageBox.Show("Login successful");
}
else
{
MessageBox.Show("Username and Password Incorrect");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这是控件类
public class LoginControl
{
}
答案 0 :(得分:1)
以最简单,最文字的形式
public class Authentication
{
public void Login(string userName, string password)
{
try
{
string query = "Select * from [UserTbl] where username='" + userName + "' and password='" + password + "'";
DBConnect db = new DBConnect();
DataTable dt = db.GetData(query);
if (dt.Rows.Count > 0)
{
MessageBox.Show("Login successful");
}
else
{
MessageBox.Show("Username and Password Incorrect");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
public void button1_Click(object sender, EventArgs e)
{
var authentication = new Authentication();
authentication.Login(txtusername.Text, txtpassword.Text);
}
我回避了一个事实,那就是除了显示结果外,它似乎没有其他作用。大概您正在执行此代码中未见的其他操作。另外,通过串联用户ID和密码来创建SQL会带来严重的SQL注入风险,因此应改为使用参数。
如果该方法绝对仅打算在该单个应用程序的上下文中使用,则这可能就足够了。但是,如果您希望在MessageBox.Show
不可用的某些情况下可以使用此方法,该怎么办?也许您希望能够在任何Windows Forms应用程序之外重用此登录代码。 (如果我们可以减少与任何UI绑定的代码量,则是很好的选择。)
您可以通过让方法返回结果来将其分开。这样,该方法将指示某件事是否成功,并且您的UI代码确定是否或如何将其传达给用户。在这种情况下,您的方法可能更像这样:
public bool Login(string userName, string password)
{
string query = "Select * from [UserTbl] where username='" + userName + "' and password='" + password + "'";
DBConnect db = new DBConnect();
DataTable dt = db.GetData(query);
if (dt.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
// or, just
// return dt.Rows.Count > 0;
}
在许多情况下,返回某种更详细的Result
类是有意义的,但是在此示例中,代表失败成功的bool
就足够了。
现在,您的UI代码可以执行以下操作:
public void button1_Click(object sender, EventArgs e)
{
try
{
var authentication = new Authentication();
var success = authentication.Login(txtusername.Text, txtpassword.Text);
if (success)
{
MessageBox.Show("Login successful");
}
else
{
MessageBox.Show("Username and Password Incorrect");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
如果您需要重用上面的代码并且不想重复它,则可以创建一个单独的控件,将按钮和单击处理程序都移到其中。
答案 1 :(得分:0)
我假设这是WinForms吗?
您可以在LoginControl
事件处理程序中添加一个公共函数,只需从button1_Click
事件处理程序中调用它即可。
您将无法访问LoginControl
中的表单控件,因此必须将所需的值从表单控件传递给编写的函数。您的函数可能会返回一些信息来指示登录是否成功,这样您就可以显示来自button1_Click
事件处理程序的正确消息。