在jqGrid中,无论如何都有不同的读取值而不是保存单个属性/列?

时间:2013-08-24 16:35:19

标签: c# jquery asp.net-mvc reflection jqgrid

我正在使用jqGrid,我的后端是asp.net-mvc。我想知道我是否可以使用不同的值来读取和写入我的后端属性。

这里的背景是我的服务器端排序是通用的,并且通过获取在我的jqGrid中传递的列名称来工作,并且看起来按照我的集合的对象的属性进行排序。除了一种情况外,这种方法很有效

假设我有一个显示人数据的网格。我在服务器上有一组Person对象。假设我有一个显示personName的列。

在客户端colModel上,我将colModel的t he Name and Index properties设置为“PersonName”。

在服务器端,我的person对象具有PersonName属性,因此当我对其进行过滤或排序时,它使用C#反射来对该属性进行排序和过滤。

问题是如果我想编辑该属性并且编辑是选择下拉列表,其中Id是PersonId而文本是PersonName,当我保存时我希望它将Id保存为“PersonId”属性(不PersonName“属性”

我当前的解决方案(感觉很笨拙)是在网格中有两列

这是一个例子(简化显示要点):

  { name: "PersonName", index: "PersonName", width: 78, editable: false },
  { name: "PersonId", index: "PersonId", width: 78, editable: true, hidden: true, editrules: { edithidden: true, required: true} },
  1. 可见并用于排序和过滤但不可编辑的名称(名称和索引是PersonName),因此它不会显示在编辑对话框中。

  2. 隐藏的第二列(隐藏:true)但已加入edithidden:true,因此它显示在编辑对话框中,用于写入值(这将是PersonId)属性。

  3. 这有效,但我想看看是否有更优雅的方法来解决这个问题,除了有两个真正代表一个数据的不同列。

3 个答案:

答案 0 :(得分:2)

jqGrid提供了许多回调,这些回调在编辑单元格时被调用(参见here)。

其中一个在数据发送到服务器之前调用,是serializeCellData,允许您在发送到服务器之前修改数据的序列化方式。如果您的jqGrid配置了{cellsubmit: 'remote', cellurl: <a non empty url>}(基于github上的代码),则会调用此函数

我会尝试更改该功能中的密钥(PersonName - &gt; PersonId)。

答案 1 :(得分:1)

您使用的解决方案是优雅的解决方案。 jqGrid(或其他网格)中的常见模式是隐藏的列表示主键或外键。

答案 2 :(得分:0)

我对jqGrid了解不多,但你可以这样做:jqGrid Link Display Text

基本上,您使用ID列,但使用格式化程序将值格式化为PersonName。