我正在代码后面创建列模型,但是我在堆栈中为数值创建editoption,这是一个函数检查值,如果它的数字otherWhise警告消息,但我无法在后面的代码中使用javascript函数。
在我模拟后面的代码后,我将转换为json以在aspx页面中使用。
c#代码背后的
else if (prop.PropertyType == typeof(decimal))
{
pr.name = prop.Name;
pr.index = prop.Name;
pr.sorttype = "number";
pr.editoptions = new { dataInit = numericonly };
}
ASPX
function numericonly(elem) {
$(elem).numeric(false, function() { alert("Integers only"); this.value = ""; this.focus(); });
}
答案 0 :(得分:1)
问题很明显。 JSON不支持函数作为一种类型。您可以轻松完成以下任务:1)在服务器端填充字符串作为dataInit
的值。 2)你"预处理"列模型并将dataInit
的非法字符串值更改为对相应函数的引用。你可以"预处理"创建网格之前的列模型,或者在创建beforeProcessing
回调内部之后,甚至是在开始编辑之前的某个地方之后的列模型。由于dataInit
仅在编辑期间使用,因此您必须在编辑开始之前随时修复dataInit
。
要更改colModel
,您可以使用setColProp
方法,也可以按colModel
获取内部var colModel = $("#gridid").jqGrid("getGridParam", "colModel");
数组的参考,然后执行某些列的任何必要修改。代码如下所示:
function numericonly(elem) {
...
}
...
var colModel = $("#gridid").jqGrid("getGridParam", "colModel"), i, cm;
for (i = 0; i < colModel.length; i++) {
cm = colModel[i];
if (cm.editoptions != null && typeof cm.editoptions.dataInit === "string") {
switch (cm.editoptions.dataInit) {
case "numericonly":
// function numericonly is visible here and can be used
cm.editoptions.dataInit = numericonly;
break;
....
default:
delete cm.editoptions.dataInit; // delete wrong value
break;
}
}
}
The old answer包含对自定义格式化程序相同构思的描述。