如何将List<model>
从视图传递到控制器?请参阅下面的示例@Html.ActionLink
。我想要点击删除后选择的checkboxes
用户是什么。
public class Images
{
public string Imgs { get; set; }
public bool chkSelected { get; set; }
}
@model IEnumerable<Models.Images>
@using (Html.BeginForm())
{
<span class="galleryImage">
@foreach (var image in Model)
{
<a href="@Url.Content("~/ImageGallery/" + image.Imgs)" data-gallery>
<img src="@Url.Content("~/ImageGallery/thumbnails/" + image.Imgs)">
</a>
@Html.CheckBox("delete_CheckBox", false, new {Value = image.chkSelected})
}
</span>
<span class="btn btn-primary fileinput-button">
<i class="glyphicon glyphicon-trash"></i>
@Html.ActionLink("Delete files...", "Delete", "Image") //Pass from here
</span>
}
[HttpGet]
[Route("Admin/Image/Delete")]
public ActionResult Delete(IEnumerable<Images> imageses)
{
//Here Imageses are coming null
return null;
}
答案 0 :(得分:1)
不幸的是,它不会那样工作。
您需要将List保留在Session(或TempData)
中Session["imageses"] = list;
这样您就可以在请求之间访问它。
修改
在您的控制器httppost操作中,您将会话转换回列表,然后在保存回数据库之前遍历表单中的复选框
答案 1 :(得分:1)
这可以通过模型绑定来完成,您只需要模型的正确语法。
<input type="hidden" value="1" name="images[0].Id"></input>
<input type="checkbox" checked="checked" name="images[0].Delete"></input>
<input type="hidden" value="2" name="images[1].Id"></input>
<input type="checkbox" name="images[1].Delete"></input>
基本上你只需要描述数组符号和属性,然后模型绑定器将完成剩下的工作。
修改强>
我还应该注意,模型绑定器也可以使用JSON表示法
[
{ Id : 1, Delete : true },
{ Id : 2, Delete : false }
]
答案 2 :(得分:1)
对不起,我写了这封信并跟踪了,但我还是会发帖:
这不是ASP.NET webforms,其中存在可以发送回服务器的页面状态。对于这样的事情,我会使用ajax将id的数组发送回控制器,然后执行我的del
<span class="galleryImage">
@foreach (var images in Model)
{
<a href="@Url.Content("~/ImageGallery/" + images.Imgs)" data-gallery>
<img src="@Url.Content("~/ImageGallery/thumbnails/" + images.Imgs)" id="myImages">
</a>
@Html.CheckBox("delete_CheckBox", false, new {Value = images.ID})
}
</span>
<span class="btn btn-primary fileinput-button">
<i class="glyphicon glyphicon-trash"></i>
@Html.ActionLink("Delete files...", "Delete", "Image", new { @id = "delete" }) //Pass from here
</span>
然后设置你的控制器:
[HttpPost]
[Route("Admin/Image/Delete")]
public ActionResult Delete(int[] ids)
{
foreach(int i in ids)
// delete
return Content("successfully deleted " + ids.Length + " items.");
}
你的js:
$("#delete").click(function(e) {
e.preventDefault();
var arr = new Array();
$("#myImages:checked").each(function () { arr.push($(this).val()); });
$.post("admin/image/delete", { ids: arr },
function(data) {
alert(data);
});
});