【问题标题】:Asp.net Core MVC - Data retrieval questionAsp.net Core MVC - 数据检索问题
【发布时间】:2021-02-24 01:15:53
【问题描述】:

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

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

当用户看到 Professor 模型中列出的条目并点击 details 时,它(像往常一样)调用“Professor”控制器中称为“details”的动作。

详细信息操作在调用时会显示教授教授的所有课程。 显示这些课程后,用户可以点击课程。

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

这里有一些代码可以让您了解这一切:(忽略我的查询字符串 - 它们的格式很差,需要在存储过程中)

Professor Controller 中的详细信息操作:

   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);          
        }

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

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

我的“课程”控制器中的索引操作(我需要根据用户之前点击的特定课程找出一种显示相关信息的方法)

   public async Task<IActionResult> Index()
        {
            var ID = TempData["ID"];
            Console.WriteLine(ID);

            string connectionString = " ";
            string queryString = "SELECT * FROM CourseModel WHERE CourseID=@id";

            var model = new List<CourseModel>();

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Parameters.AddWithValue("id", ID);

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

                    model.Add(course);
                }

            }

            return View(model);
        }

有什么想法吗?我觉得我过于复杂了,希望能得到一些建议!

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core model-view-controller asp.net-core-mvc


    【解决方案1】:

    您需要做的就是在&lt;a&gt; 标签中添加链接到课程所需的信息。假设你的课程有一个 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} 为视图/方法提供所需的任何参数

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      相关资源
      最近更新 更多