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
을 사용할 수 있지만 jqGrid 옵션에 ajaxSelectOptions: { type: "POST" }
를 추가해야 합니다.buildSelect
가 $.ajax()
성공 핸들러 내에서 호출되므로 jQuery.parseJSON(data.responseText)
가 불필요해집니다.이 개정된 접근 방식은 jqGrid 드롭다운 관리를 위한 더 명확하고 효율적이며 오류가 덜 발생하는 방법을 제공하여 "정의되지 않은" 값 문제를 제거합니다. /YourController/GetDestinationList
을 컨트롤러 작업의 실제 경로로 바꾸는 것을 잊지 마세요.
위 내용은 내 ASP.NET MVC jqGrid 드롭다운에 '정의되지 않은' 값이 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!