【发布时间】:2020-11-21 10:41:27
【问题描述】:
我有一个看起来像这样的视图模型
public class ItemViewModel
{
[Required]
public int Id { get; set; }
[Required]
public int JobId { get; set; }
public string ItemId { get; set; }
public string ItemName { get; set; }
public IList<ItemPartViewModel> Parts { get; set; }
}
如您所见,它包含一个 IList of Parts,其结构如下
public class ItemPartViewModel
{
[Required]
public int ID { get; set; }
public int ItemID { get; set; }
public string PartID { get; set; }
public string PartName { get; set; }
public float QtyInItem { get; set; }
public float Qty { get; set; }
public bool MoveAll { get; set; }
// This is the additional property to contain what user picks, the action types are harvest/transfer/dispose
public PartActionType SelectedActionType { get; set; }
}
当显示表格时,该行中的 moveAll 选项已被选中,但如果未选中,它将克隆该行。这是为了如果用户想要做这样的事情,例如//如果项目中有 4 个部分并且选择了 moveall 选项,它将对所有 4 个部分执行选定的操作。但如果不是,并且用户决定转移 2 并处置 2,我需要跟踪它。这是克隆行的 JavaScript
$(document).ready(function () {
$('.tr_clonePart input.part-class').change(function () {
let Id = $(this).attr('id');
let partId = $(this).attr('data-partId');
//getting closest tr
var selector = $(this).closest('.tr_clonePart');
if ($(this).prop("checked") == true){
// remove cloned row
$('#' + Id + 'clone').remove();
selector.find(".AllTxt").show();
selector.find(".editQty").hide();
}
else {
var $tr = $(this).closest('.tr_clonePart');
var $clone = $tr.clone();
$clone.find('td');
$tr.after($clone);
$($clone).find(".part-class").hide();
//var qtyInItem = $('input[name=Parts['+partId+"].QtyInItem").val()
$clone.find('input[type="radio"]').attr("name", (i, n) => n + 'clone');
$clone.attr('id', (Id) + "clone");
var clonedID = Id + "clone";
$($clone).append($("<td class= 'addRow' ><a href=\"javascript:add('" + clonedID + "')\">add row</a></td>"));
selector.find(".AllTxt").hide();
selector.find(".editQty").show();
}
});
这是我的行的设置
<tr class="tr_clonePart">
<td>
@part.PartIDLink
</td>
<td>
@Html.DisplayFor(x => x.Parts[i].PartName)
@Html.HiddenFor(x => x.Parts[i].PartName)
</td>
<td style="font-weight:bold">
<span class="qtyInItem">
@Html.DisplayFor(x => x.Parts[i].QtyInItem)
@Html.HiddenFor(x => x.Parts[i].QtyInItem)
</span>
</td>
<td>
@Html.CheckBoxFor(x => x.Parts[i].MoveAll, new { @class="part-class", data_partId = part.ID })
</td>
<td>
<div class="AllTxt">
@Html.DisplayFor(x => x.Parts[i].QtyInItem)
</div>
<div class="editQty">
@Html.EditorFor(x => x.Parts[i].Qty)
</div>
</td>
@foreach (var actionType in partActionTypes)
{
<td>
@Html.RadioButtonFor(x => x.Parts[i].SelectedActionType, actionType, new { name = "partRadio" })
</td>
}
</tr>
在那种情况下,它只会跟踪 0.5 的转移,但我希望列表也有正在收获的 0.5 的记录
我怎样才能使它本质上也“克隆”零件列表中的行?
【问题讨论】:
-
显示一些 html 代码或演示可能会有所帮助。
-
@Swati 我在我的行设置中添加了
-
好的,从您的代码中我了解到您有一个已被选中的复选框。所以,当用户取消选中该复选框时,
But if it is not, and the user decides to transfer 2 and dispose of 2 I need to track that...?没有得到这个?您的意思是所有行,即:tr中的所有内容都需要克隆? -
说我的商品 (qtyInItem) 中有 4 个部分。复选框以选中状态开始。这意味着它将为所有 4 个部分执行选定的操作。但是,例如,用户想要执行 2 个选项,例如转移 2 个零件和处置 2 个零件(操作类型是收获、转移、处置)。现在我可以克隆该行,但它不会影响 Ilist,因此该列表当前仅跟踪原始行中发生的情况。但它没有跟踪克隆行中发生的情况。希望这对你有意义,如果不让我知道,我会尝试澄清更多@Swati
-
@Swati 如果有帮助,我在我的视图中添加了图片
标签: javascript c# ajax list razor