سؤال

هل تمكن أي شخص من تنفيذ البرنامج المساعد لشبكة JQuery، jqGrid؟أحاول تنفيذ ترحيل JSON، وأشعر أنني أقترب، ولكنني أيضًا غارق في التفاصيل غير المهمة.إذا كان بإمكان أي شخص نشر بعض نماذج التعليمات البرمجية، سأكون ممتنًا جدًا لذلك.

هل كانت مفيدة؟

المحلول

وجدت رسالتك بينما كنت أحاول القيام بذلك لمشروعي.لقد نجحت.بالنسبة لأي شخص يحتاج إليها في المستقبل، لن يعمل jqGrid خارج الصندوق مع JSON وASP.NET.تحتاج إلى إجراء بعض التعديلات الصغيرة على الشبكة.base.js.حول السطر 829، استبدل قسم حالة json بما يلي:

case "json":
    gdata = JSON.stringify(gdata); //ASP.NET expects JSON as a string
    $.ajax({ url: ts.p.url, 
             type: ts.p.mtype, 
             dataType: "json", 
             contentType: "application/json; charset=utf-8", //required by ASP.NET
             data: gdata, 
             complete: function(JSON, st) { if (st == "success") { addJSONData(cleanUp(JSON.responseText), ts.grid.bDiv); if (loadComplete) { loadComplete(); } } }, 
             error: function(xhr, st, err) { if (loadError) { loadError(xhr, st, err); } endReq(); }, 
             beforeSend: function(xhr) { if (loadBeforeSend) { loadBeforeSend(xhr); } } });
    if (ts.p.loadonce || ts.p.treeGrid) { ts.p.datatype = "local"; }
    break;

ثم قم بإضافة الوظيفة التالية:

function cleanUp(responseText) {
    var myObject = JSON.parse(responseText);  //more secure than eval
    return myObject.d;  //ASP.NET special
}

ستحتاج أيضًا إلى تضمين محلل JSON وstringifier.إلى جانب العمل مع ASP.NET، يتم أيضًا استخدام هذا الكود المنقح أكثر أمنا لأن بيان التقييم قد اختفى.

يحرر: كان يجب أن أشير أيضًا إلى أنه قد يتعين عليك إجراء تعديلات مماثلة على الشبكة.celledit.js، وgrid.formedit.js، وgrid.inlineedit.js، وgrid.subgrid.js.

نصائح أخرى

ولقد فقط jTemplates للقيام الترحيل من جانب العميل مع مسج و ASP.NET. لقد فعلت ذلك لبلوق وظيفة على ذلك والتي يمكنك العثور هنا: HTTP: // شبكة الاتصالات العالمية .aaron-powell.com / blog.aspx؟ ID = 1209

ويبدو في كيفية إنشاء موقع البيانات قالب، إرجاع البيانات من ASP.NET ومن ثم تنفيذ حل الترحيل.

ويمكنك استخدام ASP.Net MVC JsonResult لتجميع الشبكة.

والشخص الدرجة

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }

    public static IEnumerable<Person> GetABunchOfPeople()
    {
       // Get a bunch of People.
    }
}

في جهاز تحكم أن يكون لديك:

public JsonResult GetABunchOfPeopleAsJson()
{
    var rows = (Person.GetABunchOfPeople()
        .Select(c => new
                         {
                             id = c.ID,
                             cell = new[]
                                        {
                                            c.ID.ToString(),
                                            c.Name,
                                            c.Birthday.ToShortDateString()
                                        }
                         })).ToArray();

    return new JsonResult
               {
                   Data = new
                              {
                                  page = 1,
                                  records = rows.Length,
                                  rows,
                                  total = 1
                              }
               };
}

وسوف التكوين jqGrid للرابط على النحو التالي:

url: '<%= ResolveUrl("~/Person/GetAllPeople") %>',

وأنا مجرد تخبط في محاولة لسحب كل شيء معا. اهتمامي الأول هو ببساطة توليد استجابة JSON الصحيحة. يبدو الطبقة عاد بي إلى إجراء تسلسل كخاصية اسمه "د" - هذا شيء مسج، أو اتفاقية ASP.Net طريقة شبكة الإنترنت؟ أخشى أن jqGrid سوف تبحث عن البيانات لتكون على مستوى عال، في حين asp.net ووضعها في خاصية تسمى 'د':

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static object GetData() {
        TestClass tc = new TestClass() { One = "Hello", Two = "World" };
        return tc;
    }


        $("#divResults").click(function() {
            $.ajax({
                type: "POST",
                url: "GridData_bak.aspx/GetData",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(test) {
                    // Replace the div's content with the page method's return.
                    $("#divResults").text(test.d.One);
                },
                error: function(msg) {
                    $("#divResults").text(msg);
                }
            });
        });

والبرنامج المساعد FlexGrid ذي متناثر جدا على doumentation ولكن في جزء صغير على الصفحة التجريبية هناك توت على إنشاء كائن تسلسل سلمان، وهذا هو مضلل قليلا لأن الشبكة تتطلب صيغة محددة، ولقد استدار رمز PHP للخيار أكس مع الشحوم قرد صغير يمكنك أن تفعل الشيء نفسه بالنسبة للتنسيق سلمان

وهيريس بلدي ميناء أكس

the setup for the grid
 $("#tableToFlex").flexigrid({
                 url: 'WebService.asmx/getData'}
                   ... *other configs* ...);

ويرجى النظر في التعليمة البرمجية التالية في فئة webservice.asmx

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml)> _
Public Function getData(ByVal page As Integer, _
    ByVal qtype As String, _
    ByVal Query As String, _
    ByVal rp As Integer, _
    ByVal sortname As String, _
    ByVal sortorder As String) As System.Xml.XmlDocument
    'note these parameters are inputted to determine paging and constrains for the   resultant rows

    'Sample list to send to the grid
    Dim list = New List(Of ApplicationStateInformation)
    'Sample row object that holds name , surname , address, idnumber ...
    list.Add(New RowObjects( "test1", "test1", "test1", "12345"))
    list.Add(New RowObjects( "test2", "test2", "test2", "12345"))
    list.Add(New RowObjects( "test3", "test3", "test3", "12345"))
    list.Add(New RowObjects( "test4", "test4", "test4", "12345"))
    'retun a xml doc, as we are using the xml format on the flexgrid

    Dim returnDoc = New System.Xml.XmlDocument()
    returnDoc.Load(New IO.StringReader(ToXmlResult(list)))
    Return returnDoc
End Function

Private Function ToXmlResult(ByVal list As List(Of RowObjects)) As String
    'this is the xml document format the grid understands
    Dim result As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf
    result += "<rows>" & vbCrLf
    result += String.Format("<page>{0}</page>" & vbCrLf, "1")
    result += String.Format("<total>{0}</total>" & vbCrLf, "10")
    For Each item In list
        result += ConvertRowData(item)
    Next
    result += "</rows>" & vbCrLf
    Return result
End Function

Private Function ConvertRowData(ByVal row As RowObjects) As String

    Dim result As String = String.Format("<row id='{0}'>" & vbCrLf, row.IdNumber.ToString)
    'THESE SHOULD BE HTML ENCODED (the format arg) but I left it out
    result += String.Format("<cell><![CDATA[{0}]]></cell>" & vbCrLf, row.Name)
    result += String.Format("<cell><![CDATA[{0}]]></cell>" & vbCrLf, row.Surname)
    result += String.Format("<cell><![CDATA[{0}]]></cell>" & vbCrLf, row.IdNumber)

    result += "</row>" & vbCrLf
    Return result
End Function

يعد d الموجود في json دفاعًا يحمل في ثناياه عوامل ضد استغلال محتمل

مثال لقد وجدت أن يستخدم mvc

معلومات كاملة هنا

أعتقد أنه يمكنك جعل jqgrid يعمل مع json & asp.net دون تعديلgrid.base.js وملفات jqgrid الأخرى، ويجب عليك استخدام خاصية نوع البيانات لتحديد استدعاء ajax المخصص الخاص بك وتحديد قارئ json، وسوف يستخدم jqgrid بعد ذلك مكالمة وقارئ Ajax مخصص في كل مرة يتم فيها إعادة تحميل الشبكة.

تشبه العملية ملف XML، حيث تقوم فقط بتعريف xmlreader بدلاً من jsonreader.

يتم تعريف جميع خصائص jsonreader في ملف التوثيق عبر الإنترنت

للحصول على أمثلة لنوع البيانات المخصص، راجع "الوظيفة كنوع بيانات" في ملف صفحة تجريبية حية ضمن "الجديد في 3.3"

وبلدي تنفيذ:

والبيانات: "{ 'الصفحة': '" + gdata.page + "'، 'الصفوف': '" + gdata.rows + "'، 'sidx': '" + gdata.sidx + "'، ' SORD ':' "+ gdata.sord +" '،' الثانية ':' "+ gdata.nd +" '،' _ بحث ':' "+ gdata._search +" '،' searchField ':' "+ الخبر. p.searchdata.searchField + " '،' searchString ':'" + ts.p.searchdata.searchString + " '،' searchOper ':'" + ts.p.searchdata.searchOper + " '}"،

والنجاح: وظيفة (JSON، الحادي والعشرين) { إذا (الحادي == "النجاح") {addJSONData (JSON.d، ts.grid.bDiv)؛ إذا (loadComplete) {loadComplete ()؛ }}

وInsted باستخدام الكامل الحدث اياكس الحدث استخدام النجاح. بهذه الطريقة هو منع seralize سلمان مزدوجة.

وشيء واحد فقط أنني لم أحقق مع تحرير الخلية: نفترض أنني أريد تعديل خلايا متعددة مع نوع البيانات نفسها (كثافة). ليس لدي سوى طريقة واحدة على الشبكة! وأنا غير قادر على oveload مع نوع بيانات نفسه مع اسم ديفرينت! هل هناك من حل هذا النوع من probleme؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top