C# 如何在ASP.NET MVC中将数组从一个视图和操作传递到另一个视图和操作?
我想要达到的目标: 我想要一个功能,从我的asp.net mvc网站的索引页中选择多个记录,这些记录被重定向到另一个网页,在那里可以进行批量编辑 我正在使用复选框来执行此操作,但我不知道如何从其他操作和视图访问此数组的内容 现在,我已经完成了以下代码: 索引视图:C# 如何在ASP.NET MVC中将数组从一个视图和操作传递到另一个视图和操作?,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我想要达到的目标: 我想要一个功能,从我的asp.net mvc网站的索引页中选择多个记录,这些记录被重定向到另一个网页,在那里可以进行批量编辑 我正在使用复选框来执行此操作,但我不知道如何从其他操作和视图访问此数组的内容 现在,我已经完成了以下代码: 索引视图: @model IEnumerable<BulkDelete.Models.Employee> @TempData["employeeIdsToDelete"]; <div style=
@model IEnumerable<BulkDelete.Models.Employee>
@TempData["employeeIdsToDelete"];
<div style="font-family:Arial">
@using (Html.BeginForm("checking", "Home", FormMethod.Post))
{
<table class="table">
<thead>
<tr>
<td>Checkbox<br /></td>
<th>Name</th>
<th>Gender</th>
<th>Email</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td><input type="checkbox" name="employeeIdsToDelete" id="employeeIdsToDelete" value="@item.ID" /></td>
<td>@item.Name</td>
<td>@item.Gender</td>
<td>@item.Email</td>
</tr>
}
</tbody>
<br />
</table>
<input type="submit" value="Delete selected employees" />
}
</div>
@model IEnumerable
@TempData[“employeeidstodelite”];
@使用(Html.BeginForm(“checking”、“Home”、FormMethod.Post))
{
复选框
名称
性别
电子邮件
@foreach(模型中的var项目)
{
@项目名称
@项目.性别
@邮件
}
}
控制器操作:
public class HomeController : Controller
{
SampleDBContext db = new SampleDBContext();
public ActionResult Index()
{
return View(db.Employees.ToList()) ;
}
[HttpPost]
public ActionResult UpdateMultipleRecords(IEnumerable<int> employeeIdsToUpdate)
{
return checking(employeeIdsToUpdate);
}
public ActionResult checking(IEnumerable<int>employeeIdsToUpdate)
{
foreach (var e in employeeIdsToUpdate)
{
Employee em = new Employee();
em = db.Employees.Find(e);
em.Name = ViewBag.Signature;
db.Entry(em).State = EntityState.Modified;
db.SaveChanges();
}
return View();
}
公共类HomeController:控制器
{
SampleDBContext db=新的SampleDBContext();
公共行动结果索引()
{
返回视图(db.Employees.ToList());
}
[HttpPost]
public ActionResult UpdateMultipleRecords(IEnumerable employeeIdsToUpdate)
{
退货检查(员工ID更新);
}
公共行动结果检查(IEnumerableemployeeIdsToUpdate)
{
foreach(员工ID更新中的变量e)
{
Employee em=新员工();
em=db.Employees.Find(e);
em.Name=ViewBag.Signature;
db.Entry(em.State=EntityState.Modified;
db.SaveChanges();
}
返回视图();
}
而不是发布到索引页。将表单发布到另一页
@using (Html.BeginForm("{actionNameOfAnotherPage}", "{anotherPageControllerName}", FormMethod.Post))
发布数据数组时,请对表单输入使用数组索引
@{ var index = 0;}
@foreach (var item in Model)
{
<tr>
<td><input type="checkbox" name="[@index]employeeIdsToDelete" class="mycheckbox" id="employeeIdsToDelete" value="@item.ID" /></td>
<td>@item.Name</td>
<td>@item.Gender</td>
<td>@item.Email</td>
</tr>
@{
index++;
}
}
@{var index=0;}
@foreach(模型中的var项目)
{
@项目名称
@项目.性别
@邮件
@{
索引++;
}
}
您也可以通过Ajax
调用发送它们,在这个场景中,您也可以不使用表单发送它们
<div style="font-family:Arial">
<table class="table">
<thead>
<tr>
<td>Checkbox<br /></td>
<th>Name</th>
<th>Gender</th>
<th>Email</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td><input type="checkbox" name="employeeIdsToDelete" class="mycheckbox" id="employeeIdsToDelete" value="@item.ID" /></td>
<td>@item.Name</td>
<td>@item.Gender</td>
<td>@item.Email</td>
</tr>
}
</tbody>
<br />
</table>
<input type="button" onClick="deleteEmployees()" value="Delete selected employees" />
</div>
在POST ACTION
中,您可以获取这些值
[POST]
public ActionResult UpdateEmployees(int[] employeeIdsToUpdate)
{
foreach (int e in employeeIdsToUpdate)
{
Employee em = new Employee();
em = db.Employees.Find(e);
em.Name = ViewBag.Signature;
db.Entry(em).State = EntityState.Modified;
db.SaveChanges();
}
return Json(new { ok = true, returnURL = Url.Action(nameof("YOUR VIEW IN HERE"))});
}
以下是将数组从视图发送到某个控制器操作的一些选项:
以下是将数组从控制器操作发送到其他控制器操作的一些选项:
请不要忘记将此标记为回答…谢谢另一个操作=另一个请求。在请求之间传递数据的方法很明显:在服务器上使用会话容器,使用querystring,使用cookie。在您的情况下,我会选择前者。由于某种原因,在传递数据时没有您向我展示的数据。它一直说null object referenceObject reference未设置为对象的实例。说明:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误以及错误起源于代码的详细信息。异常详细信息:System.NullReferenceException:object referenceence未设置为对象的实例。源错误:第30行:第31行:第32行:foreach(employeeIdsToUpdate中的变量e)第33行:{34行:Employee em=new Employee();更新了答案
[POST]
public ActionResult UpdateEmployees(int[] employeeIdsToUpdate)
{
foreach (int e in employeeIdsToUpdate)
{
Employee em = new Employee();
em = db.Employees.Find(e);
em.Name = ViewBag.Signature;
db.Entry(em).State = EntityState.Modified;
db.SaveChanges();
}
return Json(new { ok = true, returnURL = Url.Action(nameof("YOUR VIEW IN HERE"))});
}