解决 ASP.NET MVC jqGrid 下拉列表中的“未定义”值
在数据编辑期间动态填充 jqGrid 下拉列表时,经常会出现不需要的“未定义”值。这是由于jqGrid期望的数据结构和数据传递方式不一致造成的。
正确的 jqGrid 数据格式:
下拉列表值的理想格式是:value: "FE:FedEx; IN:InTime; TN:TNT"
当前方法的问题:
当前方法使用 ASP.NET MVC 和 jQuery 的 $.ajax()
来获取下拉数据。 StringBuilder
操作检索到的数据以匹配 jqGrid 的格式,但额外的“未定义”条目仍然存在。
调试结果:
FireBug 调试表明 sb.ToString()
引入的额外引号是罪魁祸首。 jqGrid 添加了自己的引号,导致双引号和“未定义”问题。
高级解决方案:使用 dataUrl
和 buildSelect
不是直接操作 value
属性,更强大的解决方案是在 dataUrl
或 buildSelect
中使用 jqGrid 的 editoptions
和 searchoptions
属性。 这些允许自定义数据获取和格式化。
示例 dataUrl
操作:
<code class="language-csharp">public JsonResult GetDestinationList() { List<string> allDestinations = GetAllDestinations(); return Json(allDestinations, JsonRequestBehavior.AllowGet); }</code>
示例buildSelect
功能:
<code class="language-javascript">buildSelect: function(data) { var s = ''; if (data && data.length) { for (var i = 0, l = data.length; i < l; i++) { s += data[i] + ';'; // Assuming data[i] is already in "key:value" format } return s.substring(0, s.length - 1); // Remove trailing semicolon } return s; }</code>
更新editoptions
:
<code class="language-javascript">{ name: 'destinations', editable: true, edittype: 'select', editoptions: { dataUrl: '/YourController/GetDestinationList', // Replace with your controller action path buildSelect: function(data) { // ... (buildSelect function from above) ... } } }</code>
重要提示:
Json(allDestinations);
而不使用 JsonRequestBehavior.AllowGet
,但您需要将 ajaxSelectOptions: { type: "POST" }
添加到 jqGrid 选项中。buildSelect
在 $.ajax()
成功处理程序中调用,使得 jQuery.parseJSON(data.responseText)
不必要。这种修改后的方法提供了一种更干净、更高效、更不易出错的方法来管理 jqGrid 下拉列表,消除了“未定义”值的问题。 请记住将 /YourController/GetDestinationList
替换为控制器操作的实际路径。
以上是为什么我的 ASP.NET MVC jqGrid 下拉列表显示'未定义”值?的详细内容。更多信息请关注PHP中文网其他相关文章!