C# 如何返回foreach循环中的所有数据
我在.NETCore中有一个生成ID卡的项目。当我为一个学生打印身份证时,一切正常,但我在打印多张身份证时遇到问题 我的控制器中的get方法如下:C# 如何返回foreach循环中的所有数据,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我在.NETCore中有一个生成ID卡的项目。当我为一个学生打印身份证时,一切正常,但我在打印多张身份证时遇到问题 我的控制器中的get方法如下: [HttpGet] [AllowAnonymous] public IActionResult BulkCard() { //values = ViewBag.Cards; var values = (object[])TempData["students"]; //This retrieves all student
[HttpGet]
[AllowAnonymous]
public IActionResult BulkCard()
{
//values = ViewBag.Cards;
var values = (object[])TempData["students"]; //This retrieves all students that has been selected to print their ID Card
ViewBag.Cards = values.ToArray();
var designtemplate = _context.Settings.First();
if (designtemplate.CardTemplate == 1)
{
ViewBag.Template = "1";
}
else if (designtemplate.CardTemplate == 2)
{
ViewBag.Template = "2";
ViewBag.TemplateView = "This is template 2";
}
else if (designtemplate.CardTemplate == 3)
{
ViewBag.Template = "3";
ViewBag.TemplateView = "This is template 3";
}
else
{
return RedirectToAction("CardSettings", "Settings");
}
var model = new ModelClasses();
foreach (var item in values)
{
model.Students = _context.Students.ToList();
model.Student = _context.Students.Include(c => c.Department).Include(c => c.Department.Faculty).Include(c => c.ProgramType).Include(c => c.ClassLevels).Include(c => c.Session).ToList().FirstOrDefault(c => c.Id == Convert.ToInt32(item));
ViewBag.Students = _context.Students.Include(c => c.Department).Include(c => c.Department.Faculty).Include(c => c.ProgramType).Include(c => c.ClassLevels).Include(c => c.Session).ToList().Where(c => c.Id == Convert.ToInt32(item)).ToList();
var surname = model.Student.Surname;
var firstname = model.Student.FirstName;
var middleName = model.Student.MiddleName[0];
var fullname = surname + " " + firstname + " " + middleName + ".";
ViewBag.FullName = fullname;
ViewBag.MatricNumber = model.Student.MatricNumber;
ViewBag.Department = model.Student.Department;
ViewBag.Faculty = model.Student.Faculty;
ViewBag.Passport = "/Uploads" + "/Passport/" + model.Student.Passport;
ViewBag.Signature = "/Uploads" + "/Signature/" + model.Student.Signature;
var qrdata = model.Student.QRCodeData.ToString().Replace("/", "");
using (MemoryStream ms = new MemoryStream())
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrdata, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
using (Bitmap bitMap = qrCode.GetGraphic(20))
{
bitMap.Save(ms, ImageFormat.Png);
ViewBag.QRCodeImage = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
}
}
}
return View(model);
}
我的看法如下:
@foreach (var item in ViewBag.Students)
{
@if (ViewBag.Template == "1")
{
<table>
<tr>
<td>
BULK CARD PRINTING
<img src="@ViewBag.QRCodeImage" class="qrcode">
</td>
</tr>
</table>
@*<table>
<tr>
<td>
<div class="wrapper">
<div class="container">
<div style="position: absolute;color: lightgray;opacity: 0.05;font-size: 3em;width: 50%;top: 25%; left: 80px;text-align: center;z-index: 0;background-attachment: fixed;"><img src="~/img/fedpolel-Logo.png" width="150" /></div>
<img src="~/Uploads/Passport//@item.Passport" alt="" class="profile-img">
<img src="~/img/fedpolel-Logo.png" class="logo" />
<img src="@ViewBag.QRCodeImage" class="qrcode">
<div class="content">
<table>
<tr>
<td>
<div class="title">
<h4>THE FEDERAL POLYTECHNIC</h4>
<span>ILE OLUJI, ONDO STATE.</span>
</div>
<div class="sub-content">
<center>
<h1>@item.FullName</h1>
</center>
<p>@item.MatricNumber</p>
</div>
<div class="vr"></div>
<div class="vr-right"></div>
<div class="data">
<div class="inner-data">
<span>Gender</span>
<p>@item.Gender<p />
<br>
<span>Session</span>
<p class="session">@item.Session.SessionName</p>
</div>
<div class="inner-data2">
<span>Level</span>
<p>@item.ClassLevels.ClassLevel</p>
<span>Department</span>
<p>@item.Department.DepartmentName</p>
<span>Faculty</span>
<p>@item.Department.Faculty.FacultyName</p>
</div>
<div class="inner-data3">
<div class="hr"></div>
<p><img src="@ViewBag.Signature" width="50" /></p>
<div class="paragra">Signature</div>
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</td>
</tr>
</table>*@
}
else if (ViewBag.Template == "2")
{
@ViewBag.TemplateView
}
else if (ViewBag.Teplate == "3")
{
@ViewBag.TemplateView
}
else
{
@ViewBag.NoTemplateView
}
}
@foreach(ViewBag.Students中的变量项)
{
@如果(ViewBag.Template==“1”)
{
批量制卡
@*
联邦理工学院
奥卢吉岛,昂多州。
@item.FullName
@item.MatricNumber
性别
@项目.性别
一场
@item.session.SessionName
水平仪
@item.ClassLevels.ClassLevel
部门
@item.Department.Department名称
官能
@item.Department.Faculty.FacultyName
签名
*@
}
else if(ViewBag.Template==“2”)
{
@ViewBag.TemplateView
}
否则如果(ViewBag.Teplate==“3”)
{
@ViewBag.TemplateView
}
其他的
{
@ViewBag.NoTemplateView
}
}
此代码仅返回最后一个学生的数据
我的挑战:如果我预选了5名学生,我想返回这5名学生的数据。请问,我该如何实现这一点?之所以发生这种情况,是因为您总是在每个循环迭代中将
ViewBag.Students
设置为新列表(它只包含一条记录,因为您是按Id筛选的)
初始化ViewBag.Students
循环外部(例如ViewBag.Students=new List
,循环内部只需从数据库中添加已读学生(model.student
)
e、 g:
另外,尝试在for循环之外填充model.Students
,因为当前您在每次迭代(model.Students=\u context.Students.ToList()
)时都会对数据库进行不必要的访问。在每次for循环迭代中,您都会将完整的Students读取到model属性,这是多余的。一次就足够了
我还认为您不需要将ViewBag的属性设置为模型的属性。只需传递一个模型(可能添加一些所需的属性)查看并读取模型中的数据。好的,谢谢。我需要更改视图中的任何内容吗?如果您使用模型而不是ViewBag,您可能需要更改每个循环以读取模型中的数据,而不是ViewBag。此外,如果我的答案帮助您解决了问题,请将其标记为已接受的答案。但是,尚未实现这一点,您该怎么做我开始动态生成二维码图像?您可以向模型添加属性以包含二维码,就像现在使用ViewBag一样。然后从模型而不是ViewBag读取其值。我不想将其保存到数据库中
ViewBag.Students.Add(model.Student);