传递空值
Passing a null value
任何建议都会很棒!
我的 ClassID 总是得到空值。当我添加断点时,我可以看到值 ClassID 被正确传递,但是当我的程序返回以获取我创建的列表时,在进入该特定断点后 ClassID returns null。我相信我的问题出在我的控制器上,但我似乎找不到问题所在。
这是我的数据库文件。第一个数据集从存储过程中检索我的 ClassID,我的列表下面是 returns 特定 ClassID
中的学生
public DataSet GetClass(string ClassID)
{
ClassModel classes = new ClassModel();
SqlCommand com = new SqlCommand("sp_ABEAttendanceEnrollment", ABEAttendanceDB);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@ClassID", ClassID);
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds1 = new DataSet();
da.Fill(ds1);
return ds1;
}
public IEnumerable<ClassModel> ClassModel
{
get
{
string connectionString = ConfigurationManager.ConnectionStrings["ABEAttendanceDB"].ConnectionString;
List<ClassModel> students = new List<ClassModel>();
using (SqlConnection con = new SqlConnection(connectionString))
{
ClassModel classes = new ClassModel();
SqlCommand cmd = new SqlCommand("sp_ABEAttendanceEnrollment", ABEAttendanceDB);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ClassID", classes.ClassID);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds1 = new DataSet();
da.Fill(ds1);
ABEAttendanceDB.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
ClassModel student = new ClassModel();
student.ClassID = rdr["ClassID"].ToString();
student.SID = rdr["SID"].ToString();
student.FullName = rdr["FullName"].ToString();
students.Add(student);
}
ABEAttendanceDB.Close();
return students;
}
}
}
这是我的控制器
public class ClassController : Controller
{
DAL.DB dblayer = new DAL.DB();
public ActionResult Class(ClassModel ClassModel)
{
DataSet ds1 = dblayer.GetClass(ClassModel.ClassID);
ViewBag.general = ds1.Tables;
ViewBag.Message = TempData["Message"];
DB classes = new DB();
List<ClassModel> students = dblayer.ClassModel.ToList();
return View();
}
}
你的DAL代码有点奇怪。当然 GetClass
方法应该 return IEnumerable<ClassModel>
?否则看起来你最终无缘无故地执行了两次 sp_ABEAttendanceEnrollment
。至少可以说,将 SQL 查询放在 getter 中是相当不寻常的。还不清楚为什么您需要两份数据副本(一份作为 DataTable
的集合,通过 ViewBag.general
,一份作为 List<ClassModel>
,通过 students
变量。
我不确定您的 DAL class 是否需要 ClassModel
属性。只需让 GetClass
方法直接将数据读取到 IEnumerable<Class>
中,然后 return 将其发送到控制器即可。然后你可以 return 学生列表到控制器作为你的视图的模型,像这样:
达尔:
public List<ClassModel> GetClass(string ClassID)
{
List<ClassModel> students = new List<ClassModel>();
SqlCommand cmd = new SqlCommand("sp_ABEAttendanceEnrollment", ABEAttendanceDB);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ClassID", ClassID);
ABEAttendanceDB.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
ClassModel student = new ClassModel();
student.ClassID = rdr["ClassID"].ToString();
student.SID = rdr["SID"].ToString();
student.FullName = rdr["FullName"].ToString();
students.Add(student);
}
ABEAttendanceDB.Close();
return students;
}
控制器:
public class ClassController : Controller
{
DAL.DB dblayer = new DAL.DB();
public ActionResult Class(ClassModel ClassModel)
{
ViewBag.Message = TempData["Message"];
List<ClassModel> students = dblayer.getClass(ClassModel.ClassID);
return View(students);
}
}
视图将开始于:
@model List<ClassModel>
任何建议都会很棒!
我的 ClassID 总是得到空值。当我添加断点时,我可以看到值 ClassID 被正确传递,但是当我的程序返回以获取我创建的列表时,在进入该特定断点后 ClassID returns null。我相信我的问题出在我的控制器上,但我似乎找不到问题所在。
这是我的数据库文件。第一个数据集从存储过程中检索我的 ClassID,我的列表下面是 returns 特定 ClassID
中的学生public DataSet GetClass(string ClassID)
{
ClassModel classes = new ClassModel();
SqlCommand com = new SqlCommand("sp_ABEAttendanceEnrollment", ABEAttendanceDB);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@ClassID", ClassID);
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds1 = new DataSet();
da.Fill(ds1);
return ds1;
}
public IEnumerable<ClassModel> ClassModel
{
get
{
string connectionString = ConfigurationManager.ConnectionStrings["ABEAttendanceDB"].ConnectionString;
List<ClassModel> students = new List<ClassModel>();
using (SqlConnection con = new SqlConnection(connectionString))
{
ClassModel classes = new ClassModel();
SqlCommand cmd = new SqlCommand("sp_ABEAttendanceEnrollment", ABEAttendanceDB);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ClassID", classes.ClassID);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds1 = new DataSet();
da.Fill(ds1);
ABEAttendanceDB.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
ClassModel student = new ClassModel();
student.ClassID = rdr["ClassID"].ToString();
student.SID = rdr["SID"].ToString();
student.FullName = rdr["FullName"].ToString();
students.Add(student);
}
ABEAttendanceDB.Close();
return students;
}
}
}
这是我的控制器
public class ClassController : Controller
{
DAL.DB dblayer = new DAL.DB();
public ActionResult Class(ClassModel ClassModel)
{
DataSet ds1 = dblayer.GetClass(ClassModel.ClassID);
ViewBag.general = ds1.Tables;
ViewBag.Message = TempData["Message"];
DB classes = new DB();
List<ClassModel> students = dblayer.ClassModel.ToList();
return View();
}
}
你的DAL代码有点奇怪。当然 GetClass
方法应该 return IEnumerable<ClassModel>
?否则看起来你最终无缘无故地执行了两次 sp_ABEAttendanceEnrollment
。至少可以说,将 SQL 查询放在 getter 中是相当不寻常的。还不清楚为什么您需要两份数据副本(一份作为 DataTable
的集合,通过 ViewBag.general
,一份作为 List<ClassModel>
,通过 students
变量。
我不确定您的 DAL class 是否需要 ClassModel
属性。只需让 GetClass
方法直接将数据读取到 IEnumerable<Class>
中,然后 return 将其发送到控制器即可。然后你可以 return 学生列表到控制器作为你的视图的模型,像这样:
达尔:
public List<ClassModel> GetClass(string ClassID)
{
List<ClassModel> students = new List<ClassModel>();
SqlCommand cmd = new SqlCommand("sp_ABEAttendanceEnrollment", ABEAttendanceDB);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ClassID", ClassID);
ABEAttendanceDB.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
ClassModel student = new ClassModel();
student.ClassID = rdr["ClassID"].ToString();
student.SID = rdr["SID"].ToString();
student.FullName = rdr["FullName"].ToString();
students.Add(student);
}
ABEAttendanceDB.Close();
return students;
}
控制器:
public class ClassController : Controller
{
DAL.DB dblayer = new DAL.DB();
public ActionResult Class(ClassModel ClassModel)
{
ViewBag.Message = TempData["Message"];
List<ClassModel> students = dblayer.getClass(ClassModel.ClassID);
return View(students);
}
}
视图将开始于:
@model List<ClassModel>