微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在ASP.NET MVC中将数组从一个视图和动作传递到另一个视图和动作?

如何解决如何在ASP.NET MVC中将数组从一个视图和动作传递到另一个视图和动作?

我想要实现的目标: 我想要一个功能,可以从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>

控制器动作:

  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();
        }

解决方法

代替发布到索引页面。将表单发布到另一个页面。

@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++;
    }
}
,

您还可以通过func collectionView(_ collectionView: UICollectionView,didSelectItemAt indexPath: IndexPath) { // Use indexPath.item to determine what sound to play } 呼叫发送它们,并且在此场景中,您也可以不使用表单来进行发送。

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> 页面下方

html

在您的<script> function deleteEmployees() { var checkboxes = document.getElementsByClassName("mycheckbox"); var checkedValues = []; for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { console.log(i); checkedValues.push(checkboxes[i].value) } } console.log(checkedValues); $.ajax({ type: "POST",url: '@Url.Action("YourAction","YourController")',data: { employeeIdsToUpdate: checkedValues },success: function (res) { if (res.ok) { window.location = res.returnURL; } },error: function (req,status,error) { console.log(error); } }); } </script> 中,您可以采用这些值

POST ACTION
,

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

  1. 将表单发布到您的控制器操作中
  2. 将ajax调用发送到您的控制器操作
  3. 指向您的控制器操作的MVC超链接

以下是一些将阵列从控制器动作发送到其他控制器动作的选项:

  1. 将数据保存在TempData中(跨控制器可用)
  2. 将数据保存在浏览器内存(临时存储)中
  3. 将数据保存在数据库中
  4. 将数据保存在会话对象中
  5. 将数据保存在缓存对象中

,请不要忘记将其标记为答案...谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。