Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jqGrid使用可空列保存行_Jqgrid_Asp.net Mvc 3_Nullable - Fatal编程技术网

jqGrid使用可空列保存行

jqGrid使用可空列保存行,jqgrid,asp.net-mvc-3,nullable,Jqgrid,Asp.net Mvc 3,Nullable,所以我在ASP.NETMVC3网站上有一个jqGrid。它使用内置的弹出式编辑器加载数据、搜索、过滤和保存行。我无法工作的是保存一个可为空的属性。我使用的是LargeJsonResult,而不是内置的JsonResult,因此网格中的一行示例如下: // C# class public class Row { public string A { get; set; } public string B { get; set; } public int C { get; se

所以我在ASP.NETMVC3网站上有一个jqGrid。它使用内置的弹出式编辑器加载数据、搜索、过滤和保存行。我无法工作的是保存一个可为空的属性。我使用的是LargeJsonResult,而不是内置的JsonResult,因此网格中的一行示例如下:

// C# class
public class Row
{
    public string A { get; set; }
    public string B { get; set; }
    public int C { get; set; }
}

// an example object instance, let's say these values come from the DB
var ret = new Row { A = "a", B = null, C = 5 };

// the JSON string sent to the grid will look like this (notice B is omitted)
// "{ A: 'a', C: 5 }"
现在,网格将显示如下所示:

A   B          C
a   undefined  5
这就引出了我的问题。弹出式编辑表单将在B的文本框中显示“undefined”,并将其发布到服务器。因此,如果我将其保存到数据库中,我的数据库中将有“undefined”而不是null

如何让jqGrid在往返过程中保留空值?在我看来,有一种解决方案是基于Oleg在另一个线程中解决的问题:

// override jqGrid serialization
jQuery.extend(jQuery.jgrid.edit, { ajaxEditOptions: { contentType: "application/json" }, serializeEditData: function (data) {
    return JSON.stringify(data).replace(/"undefined"/g, 'null');
}});
这会起作用,但似乎很危险,因为它在用户不知情的情况下对数据进行大量编辑。仔细考虑一下,我想这是保存null而不是“未定义”或null的其他字符串表示(空字符串等)的基本问题。期望的行为是:

  • 如果属性为null,并且用户不更改该值,那么它将作为null发布
  • 如果用户更改该值,则该属性不再为null

对于可为null的属性,我们是否可以使网格的编辑表单像这样工作?或者我必须创建一个自定义编辑表单来跟踪用户对属性所做的操作吗?

我希望我能理解您的问题。在我使用jqGrid的一个应用程序中,我曾经遇到过空值的问题。在开发应用程序时,我不确定如何解决这个问题,我在服务器端放置了一个属性的文本值“(NULL)”而不是
NULL
值。网格是为了解“(NULL)”是什么的高级用户提供的。值“(NULL)”在字段中没有意义(一个人没有名称为的用户帐户),在编辑操作的服务器代码内部,我可以区分“(NULL)”值和实际字段值。这样我就可以解决这个问题了

在您的情况下,您应该至少解决两个问题:

  • 您应该决定如何显示
    null
    。“未定义”的文本似乎不是最好的。您可以在服务器端解决“未定义”文本的问题(就像我在本例中所做的那样),也可以针对。事情很简单。它定义了单元格值应如何显示为
    包含的HTML片段。例如,您可以包含一个额外的隐藏的
    元素或其他HTML元素或属性,这些元素或属性将保存值为
    null
    的信息
  • 在编辑操作期间,您应该解决服务器端对
    null
    值进行解码的问题。您可以在服务器端非常容易地解决这个问题(就像我在将相应字段与“(NULL)”进行比较时所做的那样),或者在客户端上解决。将从网格单元(从隐藏的
    或其他隐藏的HTML元素或属性)获取信息,并将信息放入服务器请求中

  • 您可以查看一个示例,了解如何使用隐藏的
    在单元格中保存有关的附加信息,以及如何在以后读取有关的信息。

    感谢Oleg,colModel:[{unformat:customFunction1,formatter:customFunction2}]选项为我们提供了大量的工具。但有一件事——“未定义”是因为遗漏而出现的,这实际上是好的。因此,从我的示例来看,即使C#对象有一个属性B,当B为null时,自定义JSON生成器也会忽略它。如果有很多空值,这会使消息大小小得多。但使用自定义格式化程序,我们可以将“未定义”更改为其他客户端,所以我们都已设置好。非常感谢。