我将从Web API获取的列表信息作为列表通过Controller发送到Web Page。这里我显示了我需要的元素。我想从这些显示的元素中批量删除我作为复选框选择的项目。相关函数福尔斯落在Controller上,但参数为空。
这是我将列表从控件发送到视图的地方。
try
{
List<Material> MaterialInfo = new List<Material>();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(Baseurl);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage Res = await client.GetAsync("api/Materials");
if (Res.IsSuccessStatusCode)
{
var MaterialsResponse = Res.Content.ReadAsStringAsync().Result;
MaterialInfo = JsonConvert.DeserializeObject<List<Material>>(MaterialsResponse);
CurrentMaterials.Add(MaterialInfo);
}
return View(MaterialInfo);
}
}
catch (Exception)
{
return View();
}
字符串
本节中,Controller中View的响应输入在这里,但Incoming List materials部分显示为空。我尝试将其更改为List obj和object obj,但仍然不起作用。
[HttpPost]
public ActionResult StartProcedure(List<Material> materials)
{
try
{
//foreach (var item in materials)
//{
//}
return View();
}
catch (Exception ex)
{
return View();
}
}
型
这部分是我在View中显示在屏幕上的参数。
<tbody>
@using (Html.BeginForm("StartProcedure", "LastedStatus", FormMethod.Post))
{
@foreach (var material in Model)
{
@if(material.CabinStatus == CabinStatus.outCabin)
{
<tr>
<td>
@Html.CheckBoxFor(r => material.isSelected, new { @class = "checkbox" })
</td>
<td>
@Html.DisplayFor(modelItem => material.Id)
</td>
<td>
@Html.DisplayFor(modelItem => material.Code)
</td>
<td>
@Html.DisplayFor(modelItem => material.Name)
</td>
<td>
@Html.DisplayFor(modelItem => material.Description)
</td>
<td>
@Html.DisplayFor(modelItem => material.BatchNumber)
</td>
<td>
@Html.DisplayFor(modelItem => material.RfId)
</td>
<td>
@Html.DisplayFor(modelItem => material.Weight)
</td>
<td>
@Html.DisplayFor(modelItem => material.MaterialDrawerNo)
</td>
<td>
@Html.DisplayFor(modelItem => material.MaterialLocation_X)
</td>
<td>
@Html.DisplayFor(modelItem => material.MaterialLocation_Y)
</td>
<td>
@Html.DisplayFor(modelItem => material.RemainingTime)
</td>
<td>
@Html.DisplayFor(modelItem => material.PickUpTime)
</td>
<td>
@Html.DisplayFor(modelItem => material.OutsideTime)
</td>
<td>
@Html.DisplayFor(modelItem => material.CabinStatus)
</td>
<td>
@Html.DisplayFor(modelItem => material.TimeAlarm)
</td>
<td>
@Html.DisplayFor(modelItem => material.LifeEnding)
</td>
<td>
@Html.DisplayFor(modelItem => material.TimeProcess)
</td>
</tr>
}
}
<input type="button" id="deleteItems" value="Delete Selected Items" name="Verify Order Information" class="btn btn-primary btn-large" />
}
</tbody>
型
在本节中按下删除按钮时执行的操作。
@section scripts{
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
$("body").on("click", "#deleteItems", function () {
//Loop through the Table rows and build a JSON array.
var materials = new Array();
$("#table BODY TR").each(function () {
var row = $(this);
var material = {};
material.isSelected = row.find("td:eq(0)").html();
material.Id = row.find("td:eq(1)").html();
material.Code = row.find("td:eq(2)").html();
material.Name = row.find("td:eq(3)").html();
material.Description = row.find("td:eq(4)").html();
material.BatchNumber = row.find("td:eq(5)").html();
material.RfId = row.find("td:eq(6)").html();
material.Weight = row.find("td:eq(7)").html();
material.MaterialDrawerNo = row.find("td:eq(8)").html();
material.MaterialLocation_X = row.find("td:eq(9)").html();
material.MaterialLocation_Y = row.find("td:eq(10)").html();
material.RemainingTime = row.find("td:eq(0)").html();
material.PickUpTime = row.find("td:eq(11)").html();
material.OutsideTime = row.find("td:eq(12)").html();
material.CabinStatus = row.find("td:eq(13)").html();
material.TimeAlarm = row.find("td:eq(14)").html();
material.LifeEnding = row.find("td:eq(15)").html();
material.TimeProcess = row.find("td:eq(16)").html();
materials.push(material);
});
//Send the JSON array to Controller using AJAX.
$.ajax({
type: "POST",
url: "/LastedStatus/StartProcedure",
data: JSON.stringify(materials),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
alert(r + " Success.");
}
});
});
</script>
}
型
在本节中,按下删除按钮时执行的操作部分是我之前尝试的部分。
@section scripts{
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
$("body").on("click", "#deleteItems", function () {
//Loop through the Table rows and build a JSON array.
var materials = new Array();
$("#table BODY TR").each(function () {
var row = $(this).closest("tr");
var material = {};
material.isSelected = row.find("TD").eq(0).html();
material.Id = row.find("TD").eq(1).html();
material.Code = row.find("TD").eq(2).html();
material.Name = row.find("TD").eq(3).html();
material.Description = row.find("TD").eq(4).html();
material.BatchNumber = row.find("TD").eq(5).html();
material.RfId = row.find("TD").eq(6).html();
material.Weight = row.find("TD").eq(7).html();
material.MaterialDrawerNo = row.find("TD").eq(8).html();
material.MaterialLocation_X = row.find("TD").eq(9).html();
material.MaterialLocation_Y = row.find("TD").eq(10).html();
material.RemainingTime = row.find("TD").eq(11).html();
material.PickUpTime = row.find("TD").eq(12).html();
material.OutsideTime = row.find("TD").eq(13).html();
material.CabinStatus = row.find("TD").eq(14).html();
material.TimeAlarm = row.find("TD").eq(15).html();
material.LifeEnding = row.find("TD").eq(16).html();
material.TimeProcess = row.find("TD").eq(17).html();
materials.push(material);
});
//Send the JSON array to Controller using AJAX.
$.ajax({
type: "POST",
url: "/LastedStatus/StartProcedure2",
data: JSON.stringify(materials),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
alert(r + " Success.");
}
});
});
</script>
}
型
1条答案
按热度按时间brvekthn1#
我想从这些显示的元素中批量删除我作为复选框选择的项目。相关函数福尔斯落在控制器上,但参数为空。
好吧,根据您的场景和描述沿着共享的代码片段,我试图重现您的问题,我发现了3个导致控制器和
var materials = new Array();
中的空列表的结果我们在实践中看一看,我是一步一步地研究这个问题的。
不正确的脚本:
首先,我已经运行了与你的相同的代码,我发现有http/https问题,而加载您的问题如下:
x1c 0d1x的数据
表元素定义不一致:
除此之外,你正在通过
table BODY TR
提取你的table元素,但是我在你的代码中没有看到任何table和tableId。所以当你使用这种方式迭代时,它无法找到你的数据,因此,将无法将数据绑定到你的数组中。这导致提交时的null数组。正如你可以看到的:的
控制器中缺少请求正文:
你正在从请求体中发送json对象,但是你的控制器请求对此一无所知,并且你肯定在我们的控制器操作中缺少
[FromBody]
。这导致StartProcedure
操作中的结果集为空。你如何修复它:
如果为了修复现有的不一致的代码,首先,我认为可以摆脱脚本引用,因为脚本不是强制性的,你正在努力实现。
然后,我们最好定义一个tableId,这样当我们在table元素上循环时,我们可以通过table Id得到tr项。最后,我们必须在控制器操作中使用
[FromBody]
。让我们看看修改后的代码:
检视:
字符串
脚本:
型
控制器:
型
样品型号:
型
输出
**注意:**如果你注意到,我做了一些重构,以增加可读性,并试图减少代码气味。这,你应该如何解决你的这种问题一步一步。