我正在使用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} },
可见并用于排序和过滤但不可编辑的名称(名称和索引是PersonName),因此它不会显示在编辑对话框中。
隐藏的第二列(隐藏:true)但已加入edithidden:true,因此它显示在编辑对话框中,用于写入值(这将是PersonId)属性。
这有效,但我想看看是否有更优雅的方法来解决这个问题,除了有两个真正代表一个数据的不同列。
答案 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。