javascript - JavaScript - 将数组放入视图模型,然后通过 AJAX 返回模型
问题描述
我有在我的 javascript 中创建的数组,例如这里是如何创建一个数组
$("button").click(function () {
//var token = $("input[name='__RequestVerificationToken']", "#__AjaxAntiForgeryForm").val();
var partArray = []; //for creating json array
//looping through trs with class tr_clonePart
$(".tr_clonePart").each(function () {
//for storing qtys and radios of cloned and original
var qty_actiontype_cloned = []
var datas_cloned = {};
var data_original = {}//fro original
var qty_actiontype_original = [];
//get infos for various fields
var p_id = $(this).find("td > a").attr('p-id');
var mfg = $(this).find("input.part_mfg").val();
var part_name = $(this).find("input.part_name").val();
var qty_in_item = $(this).find("input.qty_in_item").val();
var item = {};
//add values in json objects
item["PartID"] = p_id
item["MFGNumber"] = mfg
item["PartName"] = part_name
item["QtyInItem"] = qty_in_item
//chcking if part-class is checked or not
if ($(this).find("input[type='checkbox'].part-class").is(':checked')) {
var move_all = $(this).find("input[type='checkbox'].part-class").val();
//item["MoveAll"] = move_all
item["MoveAll"] = (move_all == "true");
var radios = $(this).find("input[type='radio'].radios:checked").val();
data_original["action_type"] = radios //adding value of radios in array
//item['radios_c'] = radios_c
var qty = $(this).find("input.qty").val();
data_original["qty"] = qty //adding value of qty in array
qty_actiontype_original.push(data_original)
item["QtyActionTypeOriginal"] = qty_actiontype_original
//item["qty"] = qtys
} else {
var qty = $(this).find("input.qty").val();
//for original data
data_original["qty"] = qty
var radios = $(this).find("input[type='radio'].radios:checked").val();
//for original data
data_original["action_type"] = radios
qty_actiontype_original.push(data_original)
item["QtyActionTypeOriginal"] = qty_actiontype_original
//item["MoveAll"] = "false"
item["MoveAll"] = (move_all == "false");
//looping through cloned trs
$(".tr_clonePart_" + p_id).each(function () {
var radios_clones = $(this).find("input[type='radio'].radios:checked").val();
//puuting value in cloned array
datas_cloned["action_type"] = radios_clones
console.log(radios_clones)
var qty_clones = $(this).find("input.qty").val();
datas_cloned["qty"] = qty_clones
//push data in cloned array
qty_actiontype_cloned.push(datas_cloned)
});
//push array in cloned json object
item["QtyActionTypeCloned"] = qty_actiontype_cloned
}
//getting other values
var onHand = $(this).find("input.OnHand").val();
var onWorkOrder = $(this).find("input.onWorkOrder").val();
var committed = $(this).find("input.committed").val();
var fstk = $(this).find("input.fstk").val();
item["OnHand"] = onHand
item["OnWorkOrder"] = onWorkOrder
item["Committed"] = committed
item["FSTK"] = fstk
//push json object in array
partArray.push(item)
})
但我希望能够将“partArray”放入我的 itemViewModel 中,看起来像这样
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 string MFGNumber { get; set; }
public IList<ItemPartViewModel> Parts { get; set; }
public IList<ItemComponentViewModel> Components{ get; set; }
public IList<ComponentPartViewModel> ComponentParts { get; set; }
public IList<ComponentSubCompViewModel> ComponentSubComps { get; set; }
public IList<SubCompPartViewModel> SubCompParts { get; set; }
public IList<SubCompSubCompViewModel> SubCompSubComps { get; set; }
public IList<SubCompSubCompPartViewModel> SubCompSubCompParts { get; set; }
}
如果这里有帮助的话是我的 itemPartViewModel 布局,(所有其他 IList 都具有相同的布局)
public class ItemPartViewModel
{
[Required]
public int ID { get; set; }
public int ItemID { get; set; }
public string PartID { get; set; }
public string MFGNumber { get; set; }
public string PartName { get; set; }
public float QtyInItem { get; set; }
public float Qty { get; set; }
public bool MoveAll { get; set; }
public float OnHand { get; set; }
public float OnWorkOrder { get; set; }
public float Committed { get; set; }
public float FSTK { get; set; }
public QtyActionTypeCloned[] qty_actiontype_cloned { get; set; }
public QtyActionTypeOriginal[] qty_actiontype_original { get; set; }
// This is the additional property to contain what user picks
public PartActionType SelectedActionType { get; set; }
}
所以我想知道如何将创建的每个数组放入我的 itemViewModel 中,然后将整个 ViewModel 传递给控制器方法?
这是我的 AJAX
$.ajax({
type: "POST",
url: "@IGT.baseUrl/JODetails/SpecialOrderSelection",
contentType: "application/json; charset=utf-8",
data:
JSON.stringify({ itemViewModel: myData }),
dataType: "json",
traditional: true,
success: function () {
alert('Success!');
},
error: function () {
alert('Error! ');
}
});
这可能吗?怎么做?
解决方案
这是一个猜测,但它不会是
var myData = {
Id: idValue,
JobId: jobIdValue,
ItemId: itemIdValue,
ItemName: itemNameValue,
MFGNumber: mfgNumberValue,
Parts: partArray,
Components: componentArray,
ComponentParts: componentPartArray,
ComponentSubComps: componentSubCompsArray,
SubCompParts: subCompPartsArray,
SubCompSubComps: subCompSubCompsArray,
SubCompSubCompParts:subCompSubCompPartsArray
}
var ajaxData = JSON.stringify({myViewModel: myData});
然后是控制器中的post方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SpecialOrderSelection(ItemViewModel myViewModel)
{
//rest of post method
}
也在客户端上qty_actiontype_cloned
并且qty_actiontype_original
是数组。所以我建议ItemPartViewModel
你改变
public QtyActionTypeCloned qty_actiontype_cloned { get; set; }
public QtyActionTypeOriginal qty_actiontype_original { get; set; }
至
public QtyActionTypeCloned[] qty_actiontype_cloned { get; set; }
public QtyActionTypeOriginal[] qty_actiontype_original { get; set; }
看起来您的客户端名称与服务器名称不匹配。要修复您需要在客户端上进行更改,即
item["QtyActionTypeOriginal"] = qty_actiontype_original
需要成为
item["qty_actiontype_original"] = qty_actiontype_original
或在服务器上,即
public QtyActionTypeOriginal[] qty_actiontype_original { get; set; }
需要成为
public QtyActionTypeOriginal[] QtyActionTypeOriginal{ get; set; }
推荐阅读
- sequelize.js - 如何在续集中使用 ilike 搜索整数
- python - Python 2.7:SyntaxError:文件中的非 ASCII 字符“0xe6”,错误不会消失
- opencl - CodeXL 无法运行 GPU 配置文件
- javascript - 如何反向循环 Cheerio 对象?
- c++ - 弃用 std::allocator
- spring-mvc - 请求的身份验证范围不足 [500]
- django - Django - 如何在 Django 中设置动态模板
- regex - Excel VBA 正则表达式替换丢失一个字符
- ruby-on-rails - simple_form 不显示嵌套字段
- javascript - VueJS 将数据附加到