Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET MVC中将数组从一个视图和操作传递到另一个视图和操作?_C#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 如何在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=

我想要达到的目标: 我想要一个功能,从我的asp.net mvc网站的索引页中选择多个记录,这些记录被重定向到另一个网页,在那里可以进行批量编辑

我正在使用复选框来执行此操作,但我不知道如何从其他操作和视图访问此数组的内容

现在,我已经完成了以下代码:

索引视图:

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

}

以下是将数组从视图发送到某个控制器操作的一些选项:

  • 将表单发布到控制器操作
  • 向控制器操作发送ajax调用
  • 指向控制器操作的MVC超链接

  • 以下是将数组从控制器操作发送到其他控制器操作的一些选项:

  • 在TempData中保存数据(其在控制器中可用)
  • 在浏览器内存中保存数据(临时存储器)
  • 在数据库中保存数据
  • 在会话对象中保存数据
  • 在缓存对象中保存数据

  • 请不要忘记将此标记为回答…谢谢

    另一个操作=另一个请求。在请求之间传递数据的方法很明显:在服务器上使用会话容器,使用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"))});
    
    }