Передача нулевого значения - PullRequest
0 голосов
/ 22 мая 2018

Любые предложения будут великолепны!

Я продолжаю получать нулевое значение для моего ClassID.Когда я добавляю точки останова, я вижу, что значение ClassID передается правильно, но когда моя программа возвращается к полученному списку, ClassID возвращает ноль после перехода в эту конкретную точку останова.Я считаю, что моя проблема в контроллере, но я не могу найти проблему.

Вот мой файл БД.Первый набор данных извлекает мой ClassID из хранимой процедуры и мой список ниже, который возвращает студентов с определенным 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();
    }


}   

1 Ответ

0 голосов
/ 23 мая 2018

Ваш код DAL немного странный.Конечно, метод GetClass должен возвращать IEnumerable<ClassModel>?В противном случае это выглядит так, будто вы в итоге дважды выполняете sp_ABEAttendanceEnrollment без какой-либо реальной причины.Помещение SQL-запроса в геттер довольно необычно, если не сказать больше.Также не ясно, зачем вам понадобятся две копии ваших данных (одна как набор DataTable через ViewBag.general и одна как List<ClassModel> через переменную students.

Я неубедитесь, что вам нужно свойство ClassModel в вашем классе DAL. Просто заставьте метод GetClass считывать данные напрямую в IEnumerable<Class> и возвращать их контроллеру. Затем вы можете вернуть список студентов контроллерув качестве модели для вашего вида, что-то вроде этого:

DAL:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...