如何解决如何在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
,
以下是一些用于将数组从视图发送到某些控制器操作的选项:
- 将表单发布到您的控制器操作中
- 将ajax调用发送到您的控制器操作
- 指向您的控制器操作的MVC超链接
以下是一些将阵列从控制器动作发送到其他控制器动作的选项:
- 将数据保存在TempData中(跨控制器可用)
- 将数据保存在浏览器内存(临时存储)中
- 将数据保存在数据库中
- 将数据保存在会话对象中
- 将数据保存在缓存对象中
,请不要忘记将其标记为答案...谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。