控制器中的 DataTableEditor 插件空字符串参数
DataTableEditor plugin null string parameter at controller
早上好,我已经解决这个问题一段时间了,无法弄清楚这段代码的设置有什么问题。目的是拥有一个网格 (DataTable) 并允许对该数据进行行内编辑 (Editor)。我有 datatable 从一个 ajax 调用中获取数据,编辑器正在使用另一个调用来更新记录。初始 ajax 很好并且可以正确填充,但是当我启动更新时,我发送的参数为空。这是一些代码:
<div>
<table id="post-table" class="table table-striped" style="width:100%">
<thead>
<tr role="row">
<th>postID</th><th></th><th></th><th></th><th></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<script src="~/Content/DataTables-1.10.18/js/jquery.dataTables.js"></script>
<script src="~/Content/editor-1.9.0/js/dataTables.editor.js"></script>
<link rel="stylesheet" type="text/css" href="~/Content/DataTables-1.10.18/css/jquery.dataTables.css">
<script language="javascript" type="text/javascript">
var editor;
editor = new $.fn.dataTable.Editor(
{
ajax: {
edit: {
type: "POST",
url: "/ActivationCampaign/UpdatePostRecord",
dataType: "json",
contentType: "application/json",
data: function (data) {
var obj = data.data;
var key = Object.keys(obj)[0];
var theJson = {};
theJson["campaignVersionID"] = @ViewBag.CampaignID;
theJson["salesChannelID"] = @ViewBag.SalesChannel;
theJson["postID"] = key;
theJson['amount'] = obj[key].amount;
return JSON.stringify(theJson);
}
}
},
table: "#post-table",
idSrc: "postID",
fields: [{
label: "",
name: "amount"
}]
}),
$(document).ready(function () {
$('#post-table').DataTable({
"ajax": {
"url": "/ActivationCampaign/LowLevelBudgetsForChannel?campaignID=@ViewBag.CampaignID&SalesChannelID=@ViewBag.SalesChannel",
"type": "GET",
"datatype": "json",
"dataSrc": ''
},
"pagingType": "simple",
"columnDefs": [
{"targets": [0], "visible": false, "searchable": false, "title": "post-id"},
{"targets": [1], "title": "Post" },
{"targets": [2], "title": "Post Number"},
{"targets": [3], "title": "Allocated Amount", "className": "allocated-column editable"},
{"targets": [4], "title": "Consumed Amount"}
],
"columns": [
{ "data": "postID" },
{ "data": "postName"},
{ "data": "postNumber" },
{ "data": "amount" },
{ "data": "formatedAmount" },
],
"initComplete": function (settings, json)
{
populateConsumed();
}
});
},
$('#post-table').on('click', 'tbody td:not(:first-child)', function (e)
{
editor.inline(this);
}));//end of doc ready
function populateConsumed()
{
var totalAmount = 0;
$(".allocated-column").each(function () {
var values = $(this).text().replace(',', '');
if (values > 0)
{
totalAmount += parseFloat(values);
}
});
$('#txtchangeBudget').val(JSON.stringify(totalAmount).replace(/\B(?=(\d{3})+(?!\d))/g, ","));
}
</script>
</div>
以及操作:
[System.Web.Mvc.HttpGet]
public JsonResult LowLevelBudgetsForChannel(int campaignID, int salesChannelID)
{//TODO get defensive on the parameters
return Json(activationCampaignService.GetLowLevelBudgetsForChannel(
campaignID, salesChannelID),
JsonRequestBehavior.AllowGet
);
}
[System.Web.Http.HttpPost]
public JsonResult UpdatePostRecord([FromBody]string budgetRecord)
{
if(budgetRecord == null)
{
}
return Json("hello");
//return Json(activationCampaignService.UpdatePostRecord(budgetRecord));
}
LowLevelBudgetsForChannel
调用工作正常,但 UpdatePostRecord
在 budgetRecord
中始终具有空值。请注意,HttpPost 属性来自与另一个包不同的包,但我刚刚更改了它,但我担心我现在同时安装了 System.Net.Http
和 System.Web.Http
,有没有人知道会出现的任何问题原因。
因为我需要构建要发送的 json 并且发送的数据表示多个 table 中的数据,所以我更愿意发送字符串并在操作中对其进行处理。目前 IE 调试器显示它认为我正在发送这个:
{"campaignVersionID":186,"salesChannelID":45,"postID":"20","amount":"1001"}
我在这里使用的是遗留系统,其中有很多错误,但我不认为这与此有任何关系,我只是没有正确设置它。我最初没有正确设置内容类型或数据类型或 from body 属性,但遵循该建议并没有解决我的问题。有什么建议吗?
[编辑]
我目前认为它与发生的序列化有关,因为我在其上安装了 Fiddler 并且值在请求正文中发送。
最后我需要的只是创建与我发送的 javascript 结构相匹配的类型,并且所有内容都已正确填充。所以可能是某处引擎盖下的某种序列化错误。有没有人知道字符串无法像那样绑定的原因?
早上好,我已经解决这个问题一段时间了,无法弄清楚这段代码的设置有什么问题。目的是拥有一个网格 (DataTable) 并允许对该数据进行行内编辑 (Editor)。我有 datatable 从一个 ajax 调用中获取数据,编辑器正在使用另一个调用来更新记录。初始 ajax 很好并且可以正确填充,但是当我启动更新时,我发送的参数为空。这是一些代码:
<div>
<table id="post-table" class="table table-striped" style="width:100%">
<thead>
<tr role="row">
<th>postID</th><th></th><th></th><th></th><th></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<script src="~/Content/DataTables-1.10.18/js/jquery.dataTables.js"></script>
<script src="~/Content/editor-1.9.0/js/dataTables.editor.js"></script>
<link rel="stylesheet" type="text/css" href="~/Content/DataTables-1.10.18/css/jquery.dataTables.css">
<script language="javascript" type="text/javascript">
var editor;
editor = new $.fn.dataTable.Editor(
{
ajax: {
edit: {
type: "POST",
url: "/ActivationCampaign/UpdatePostRecord",
dataType: "json",
contentType: "application/json",
data: function (data) {
var obj = data.data;
var key = Object.keys(obj)[0];
var theJson = {};
theJson["campaignVersionID"] = @ViewBag.CampaignID;
theJson["salesChannelID"] = @ViewBag.SalesChannel;
theJson["postID"] = key;
theJson['amount'] = obj[key].amount;
return JSON.stringify(theJson);
}
}
},
table: "#post-table",
idSrc: "postID",
fields: [{
label: "",
name: "amount"
}]
}),
$(document).ready(function () {
$('#post-table').DataTable({
"ajax": {
"url": "/ActivationCampaign/LowLevelBudgetsForChannel?campaignID=@ViewBag.CampaignID&SalesChannelID=@ViewBag.SalesChannel",
"type": "GET",
"datatype": "json",
"dataSrc": ''
},
"pagingType": "simple",
"columnDefs": [
{"targets": [0], "visible": false, "searchable": false, "title": "post-id"},
{"targets": [1], "title": "Post" },
{"targets": [2], "title": "Post Number"},
{"targets": [3], "title": "Allocated Amount", "className": "allocated-column editable"},
{"targets": [4], "title": "Consumed Amount"}
],
"columns": [
{ "data": "postID" },
{ "data": "postName"},
{ "data": "postNumber" },
{ "data": "amount" },
{ "data": "formatedAmount" },
],
"initComplete": function (settings, json)
{
populateConsumed();
}
});
},
$('#post-table').on('click', 'tbody td:not(:first-child)', function (e)
{
editor.inline(this);
}));//end of doc ready
function populateConsumed()
{
var totalAmount = 0;
$(".allocated-column").each(function () {
var values = $(this).text().replace(',', '');
if (values > 0)
{
totalAmount += parseFloat(values);
}
});
$('#txtchangeBudget').val(JSON.stringify(totalAmount).replace(/\B(?=(\d{3})+(?!\d))/g, ","));
}
</script>
</div>
以及操作:
[System.Web.Mvc.HttpGet]
public JsonResult LowLevelBudgetsForChannel(int campaignID, int salesChannelID)
{//TODO get defensive on the parameters
return Json(activationCampaignService.GetLowLevelBudgetsForChannel(
campaignID, salesChannelID),
JsonRequestBehavior.AllowGet
);
}
[System.Web.Http.HttpPost]
public JsonResult UpdatePostRecord([FromBody]string budgetRecord)
{
if(budgetRecord == null)
{
}
return Json("hello");
//return Json(activationCampaignService.UpdatePostRecord(budgetRecord));
}
LowLevelBudgetsForChannel
调用工作正常,但 UpdatePostRecord
在 budgetRecord
中始终具有空值。请注意,HttpPost 属性来自与另一个包不同的包,但我刚刚更改了它,但我担心我现在同时安装了 System.Net.Http
和 System.Web.Http
,有没有人知道会出现的任何问题原因。
因为我需要构建要发送的 json 并且发送的数据表示多个 table 中的数据,所以我更愿意发送字符串并在操作中对其进行处理。目前 IE 调试器显示它认为我正在发送这个:
{"campaignVersionID":186,"salesChannelID":45,"postID":"20","amount":"1001"}
我在这里使用的是遗留系统,其中有很多错误,但我不认为这与此有任何关系,我只是没有正确设置它。我最初没有正确设置内容类型或数据类型或 from body 属性,但遵循该建议并没有解决我的问题。有什么建议吗?
[编辑] 我目前认为它与发生的序列化有关,因为我在其上安装了 Fiddler 并且值在请求正文中发送。
最后我需要的只是创建与我发送的 javascript 结构相匹配的类型,并且所有内容都已正确填充。所以可能是某处引擎盖下的某种序列化错误。有没有人知道字符串无法像那样绑定的原因?