entity-framework - 如何使用 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; }
解决方案
根据 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");
}
推荐阅读
- c - 使用指针算法编写字符串长度函数
- python-3.x - 添加后是否可以更改cartopy中对象的颜色?
- c++ - 如何将二维向量双精度映射到字符串?
- nginx - Traefik 不信任 ssl 证书
- .net - 将作为单个 DLL .类库或 WCF 服务库工作的 Web 服务?
- swift - 如何从日期类型中获取日期和月份 - swift 4
- node.js - 实现 SequelizeJS 软删除的问题
- windows - 由于未知原因,无法让 Nginx 在 Windows 上的 Docker 环境下运行
- linux - 无法在 MacOS 上回显和打印到 tty 端口
- html - Firefox 中嵌套的 SVG foreignObject 字体大小显示错误