Asp.net Core MVC-数据检索问题

问题描述

我是Asp.net核心的新手,在尝试思考这个问题时遇到了一些麻烦:

我有2个控制器:“课程”控制器和“教授”控制器。

用户看到Professor模型中列出的条目并点击详细信息时,它(通常)会在“ Professor”控制器中调用动作,称为“ details”。

Details操作被调用时,显示教授教授的所有课程。 显示这些课程后,用户可以单击课程。

这就是我要坚持的地方:用户单击课程后,我需要在“课程”控制器中调用一个函数显示用户单击的课程的名称(以及其他相关信息)。课程-例如课程的部门)。我很难弄清楚如何“保存”用户单击的课程名称,因为他们只是单击按钮。我该怎么做呢?

下面是一些代码,可以将它们全都放在透视图中:(忽略我的查询字符串-格式不正确,需要存储在存储过程中)

我的教授控制器中的详细操作:

Hudson.instance.items.each { job ->

  def triggers = job.getTriggers()
  triggers.each { trigger ->
    println "trigger is: ${trigger}"
  }
}

“详细信息”视图显示教授教授的所有课程:

   public IActionResult Details(int? id)
        {
            TempData["ID"] = id;

            string connectionString = " ";

            if (id == null)
            {
                return NotFound();
            }

            string queryString = "SELECT ProfessorModel.FirstName,CourseModel.CourseName FROM ProfessorModel LEFT OUTER JOIN CourseAssignment ON ProfessorModel.ProfessorID = CourseAssignment.ProfessorID LEFT OUTER JOIN CourseModel ON CourseModel.CourseID = CourseAssignment.CourseID WHERE ProfessorModel.ProfessorID=@profID";

            var courseModel = new List<CourseModel>();

            using (sqlConnection connection = new sqlConnection(connectionString))
            {
                sqlCommand command = new sqlCommand(queryString,connection);
                command.Parameters.AddWithValue("profID",id);

                connection.open();
                sqlDataReader rdr = command.ExecuteReader();
                while (rdr.Read())
                {
                    var course = new CourseModel();
                    course.SubjectName = rdr["CourseName"].ToString();

                    courseModel.Add(course);
                }

            }

            // var professorModel = await _context.ProfessorModel
            // .FirstOrDefaultAsync(m => m.ProfessorID == id);
            if (courseModel == null)
            {
                return NotFound();
            }
            
            return View(courseModel);          
        }

我的“ Course”控制器中的索引动作(我需要找出一种方法来根据用户先前单击的特定类来显示相关信息)

<h1>
    @foreach (var course in Model)
    {
    <a asp-controller="Course" asp-action="Index"> @course.SubjectName </a>
    <br />
    }
</h1>

有什么想法吗?我觉得我太复杂了,不胜感激一些建议!

解决方法

您需要做的就是在<a>标签中添加链接到课程所需的信息。假设您的课程具有作为其主键的Id属性,那么您将执行以下操作。

@foreach (var course in Model)
{
    <a asp-controller="Course" asp-action="Details" asp-route-id="@course.Id"> @course.SubjectName </a>
}

然后让Details方法(或者您可以将页面和方法命名为所需的任何名称)接受该参数id

public async Task<IActionResult> Details(int id) { ... }

您可以使用asp-route-{parameterName}

提供查看/方法所需的任何参数。