一些结果是空路过字典当<字符串,INT []>从JS到MVC控制器
问题描述:
我为此感到困惑,帮助将是非常赞赏:一些结果是空路过字典当<字符串,INT []>从JS到MVC控制器
所以我有一个按钮,当你点击它它会调用函数bulkUpdate。
我创建了一个字典在该js函数与格式:1键和2个值。
当我验证JS的值,ALL在字典中的值不为空,你可以通过以下PRINTSCREEN看到: the dictionary in javascript
然而,当它通过一个Ajax调用达到控制器,一些的值为空。我注意到这只发生在以字母而不是数字开头的键上。 the dictionary in the controller
有人知道为什么发生这种情况,我该如何解决它?
JS:
function bulkUpdate(e, id){
var dictionary = {};
var el = $("#grid"+id),
grid = el.data("kendoGrid"),
dataSource = grid.dataSource;
var data = grid._data;
for(i=0; i<data.length; i++){
var foodID = grid._data[i].ID;
var extraQuantityBoxe = $("#extraAmmount" + foodID).val();
var takeStorageBoxe = $("#takeFromStorage" + foodID).val();
dictionary[foodID] = new Array();
dictionary[foodID].push(extraQuantityBoxe);
dictionary[foodID].push(takeStorageBoxe);
}
$.ajax({
type: "POST",
url: 'BulkUpdate',
data: {values : dictionary},
success: function (data) {
$("#grid"+id').data('kendoGrid').dataSource.read();
},
error: function() {
var notification = $("#notification").getKendoNotification();
var notificationBaseHeight = 100, notificationLineHeight = 25;
notification.show({
message: '@Resources.warnGenericError'
}, "error");
}
});
}
控制器:
public ActionResult BulkUpdate(Dictionary<string, int[]> values)
{
try
{
foreach (KeyValuePair<string, int[]> pair in values)
{
string key = pair.Key;
int[] value = pair.Value;
Guid foodID= new Guid(key);
FOODS food = _db.FOODS.Find(foodID);
food.INGREDIENT_EXTRA_QUANTITY = value[0];
food.TAKE_FROM_STORAGE = value[1];
food.INGREDIENT_TOTAL_QUANTITY = food.INGREDIENT_QUANTITY + value[0] + value[1];
food.UPDATED_AT = DateTime.Now;
food.UPDATED_BY = System.Web.HttpContext.Current.Session["username"].ToString();
}
_db.SaveChanges();
return Json(true);
}
catch (Exception e)
{
return Json(false, e.Message);
}
}
答
我不能够很容易地验证这一点的解决方案,但它似乎相关的数据是如何被传递到从AJAX控制器调用,然后如何在控制器端进行反序列化。尝试在发送之前将字典串联起来。
更改数据线在你的AJAX调用,尝试它一对夫妇的方式...
只是字符串化字典:
data: {values : JSON.stringify(dictionary)}
或者,整个POST正文:
data: JSON.stringify({values : dictionary})
让我知道,如果这对你有用。
我已经试过这个解决方案,它只返回给控制器一个数组,两个字符串,一个说“动作”,另一个说“控制器”。尽管如此,感谢您回答 – Rute
您是否尝试将[FromBody]添加到您的参数定义中?所以你的方法签名是BulkUpdate([FromBody] Dictionary values)。 –
是的,仍然只出现“动作”和“控制器” https://i.stack.imgur.com/ieRP1.png – Rute