首页 > 解决方案 > 如何使用 Asp.net core MVC 从一个视图页面查看不同表中的数据并将数据插入到另一个表中?

问题描述

设想

我将创建一个简单的界面来插入来自使用 Asp.net Core MVC 和 EF 的学生的捐款。根据该应用程序,在输入捐赠之前,我必须使用学生的入学编号(Add_No)显示学生信息(来自学生表)。然后我必须使用相同的视图插入捐赠数据,但使用不同的提交按钮到表 Welfare。

问题:

我按照我的代码块中所示的方式尝试了它。插入成功。但是即使我检索到学生信息,我也无法在屏幕上显示它们。

View.cshtml 的代码

@model Student_Management.Models.Welfare

@{
    ViewData["Title"] = "Wcreate";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h4 align="center">Welfare Donation Entry Form</h4>

<hr />
<table>
    <tr>
        <td>
            @using (Html.BeginForm("getStudentInfo", "Payments", FormMethod.Post))
            {
                <div class="form-group">
                    <label asp-for="Add_No" class="control-label"></label>
                    <input asp-for="Add_No" class="form-control" id="t1" name="A" />
                    <span asp-validation-for="Add_No" class="text-danger"></span>
                </div>

                <div class="form-group">
                    <input type="submit" value="getStudentInfo" class="btn btn-primary" id="btngetStudentInfo" />
                </div>
            }
        </td>
        <td>
            <ul>
                @if (ViewBag.students != null)
                {
                    @foreach (var std in ViewBag.students)
                    {
                        <li>
                            @std
                        </li>
                    }
                }
            </ul>
        </td>
    </tr>
</table>

控制器代码

 public class PaymentsController : Controller
    {
        private readonly ConnectionString _context;

        public PaymentsController(ConnectionString context)
        {
            _context = context;
        }
 public IActionResult Wcreate(Welfare welfare, string A)
        {
            int maxR_No = _context.Welfare.Max(p => p.R_No);
            maxR_No = maxR_No + 1;
            welfare.R_No = maxR_No;

            if (ModelState.IsValid)
            {

                _context.Add(welfare);
                _context.SaveChanges();
                ModelState.Clear();
            }
            return View();
        }
 public ActionResult getStudentInfo(string A)
        {
            var items = _context.Students.Where(x => x.Add_No == A)
              .Select(x => new
              {
                  P1 = x.F_Name,
                  P2 = x.Class + "-" + x.ClassNo
              });//.ToList();

            ViewData["students"] = items;
            return RedirectToAction("Wcreate");
        }

namespace Student_Management.Models
{
    public class Welfare
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int R_No { get; set; }
        [Required]
        public string Add_No { get; set; }
        [Required]
        public string Grade { get; set; }
        [Required]
        public string STClassNo { get; set; }
        [Required]
        public string Month { get; set; }
        [Required]
        public string Year { get; set; }
        [Required]
        public string Rs { get; set; }
        [Required]
        [DataType(DataType.Date)]
        public DateTime Date { get; set; }
        public string cmt { get; set; }

标签: entity-frameworkasp.net-coremodel-view-controller

解决方案


根据 Jasen 的提示,我修改了我的操作方法和视图,如下所示。

<td>
            @using (Html.BeginForm("getStudentInfo", "Payments", FormMethod.Post))
            {
                <div class="form-group">
                    <label asp-for="Add_No" class="control-label"></label>
                    <input asp-for="Add_No" class="form-control" id="t1" name="A" />
                    <span asp-validation-for="Add_No" class="text-danger"></span>
                </div>

                <div class="form-group">
                    <input type="submit" value="getStudentInfo" class="btn btn-primary" id="btngetStudentInfo" />
                </div>
            }
        </td>
        <p>@TempData["info"]</p>
        <p>@(TempData["info2"] +"-" + TempData["info3"])</p>

动作方法

 public ActionResult getStudentInfo(string A)
        {
            var items = _context.Students.Where(x => x.Add_No == A)
              .Select(x => new
              {
                  P1 = x.F_Name,
                  P2 = x.Class,
                  p3=x.ClassNo
              }).ToList();
            TempData["info"] = items[0].P1; 
TempData["info2"] = items[0].P2; 
TempData["info3"] = items[0].p3;
            return RedirectToAction("Wcreate");
        }


推荐阅读