【发布时间】:2019-10-04 14:54:32
【问题描述】:
基本上当我这样做时
public ActionResult ValidateLogin()
{
return View();
}
现在工作正常当我在这种情况下使用 try catch 块并且我在 try catch 块中执行类似 return RedirectToAction("Dashboard"); 的操作时,我还希望它应该检查指定,然后再将用户重定向到主页,它触发和错误,就像并非所有路径都返回一个值。
我的源代码是这样的
public ActionResult ValidateLogin(UserAuthClass auth)
{
string constring = @"Data Source=DESKTOP-9CM4N5S\SQLEXPRESS;Initial Catalog=MVCLogintestDB;Integrated Security=True";
using (SqlConnection con = new SqlConnection(constring))
{
con.Open();
string query = "select * from [MVCLogintestDB].[dbo].[users_table] where username = @username and password= @password and designation = @designation";
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@username",auth.username);
cmd.Parameters.AddWithValue("@password", auth.password);
cmd.Parameters.AddWithValue("designation", auth.designation);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
try
{
da.Fill(dt);
if (dt.Rows.Count > 0)
{
if (auth.designation == "Admin")
{
return RedirectToAction("AdminDashboard");
}
else if (auth.designation == "Security")
{
return RedirectToAction("SecurityDashboard");
}
else if (auth.designation == "Visitor")
{
return RedirectToAction("VisitorDashboard");
}
}
else
{
return RedirectToAction("WrongPasswordArea");
}
}
catch(Exception ex)
{
throw ex;
}
}
}
}
我试图了解我在这里似乎遗漏了什么错误的东西?
【问题讨论】:
-
当
dt.Rows.Count > 0为真,并且auth.designation既不是"Admin" 也不是"Security" 也不是"Visitor" ,那么您当前的代码不会返回任何内容。这可能就是编译器所抱怨的。 -
@bassfader,我不明白
-
您缺少
return声明,因为dt.Rows.Count > 0和auth.designation不是“Admin”、“Security” i> 或“访客”。对于方法中所有可能的代码路径,您的代码没有return语句。例如,当auth.designation是其他东西时,您想做什么,例如 "Guest"? -
看起来您混淆了业务和表示逻辑。正如 Jerry 在他的回答中所说,您必须重定向到一个操作并向用户显示错误,try-catch 引入了另一个不返回视图的代码路径。这就是为什么遵循 MVC 模式来添加抽象并清楚地了解 Controller 的职责从哪里开始和结束是很好的原因。
-
@bassfader,谢谢兄弟,你做得很好,我非常感激,但杰瑞说对了。完全按照我的意愿工作
标签: c# sql-server asp.net-mvc