يعمل MVC $.getJSON لأول مرة على الصفحة الرئيسية، ثم يتوقف عن استدعاء عنوان URL في عمليات التحميل اللاحقة

StackOverflow https://stackoverflow.com/questions/1917553

  •  20-09-2019
  •  | 
  •  

سؤال

لقد قمت بإعداد صفحة رئيسية MVC تقوم بتحميل قائمة ديناميكية باستخدام قوالب AJAX وJSON - يتم إرجاع JSON بالمكالمة التالية:

var tabList = [];// هذا يحمل بيانات json عند رد الاتصال

var getTabs = function () {
    $.getJSON('Home/TabList', null, function (json) {
        Sys.Observer.clear(tabList); 
        Sys.Observer.addRange(tabList, json); 
    });
}

if (tabList == '') { getTabs(); }

لذلك يستدعي هذا وظيفة على جهاز HomeController الخاص بي لإرجاع JSON:

   public JsonResult  TabList()
    {
            //get tabs
            ... //call code to get tabs - removed for ease of reading this question
            JsonResult jsonTabs = Json(tabItems);

            jsonTabs.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

            return jsonTabs;
        }
        catch (Exception ex)
        { throw ex; }

    }

يتم استخدامه في القالب التالي:ربط:

id = "tabTemplate" sys:attach = "dataview" class = "sys-template Grid_16 topnav" dataview:data = "{{ tabList }}"

إنشاء عناصر القائمة باستخدام علامة الربط:

sys:href="{{'/' + وحدة التحكم + '/' + الإجراء + '/'}}" target="_top"

نشر نص القائمة باستخدام خاصية من كائن JSON:

{{نص}}

ثم قمت بعد ذلك بإرفاق هذه الصفحة الرئيسية بصفحتين مختلفتين من صفحات MVC ("الفهرس" و"حول"، ويأخذني global.asax إلى "الفهرس")

لذلك، يعمل هذا بشكل رائع في المرة الأولى التي أدخل فيها إلى الصفحة، ويتم رسم القائمة بشكل صحيح، ولكن عندما أقوم بالنقر فوق عنصر القائمة "حول" الذي تم إنشاؤه في القالب أعلاه باستخدام الرابط "الصفحة الرئيسية/حول" فإنه يتوقف عن العمل .ما يحدث هو أن جافا سكريبت يتم استدعاؤها بشكل صحيح (أي.إنها تستدعي وظيفة "getTabs" وتمر عبر استدعاء getJSON) لكنها لا تصل فعليًا إلى وحدة التحكم الخاصة بي للحصول على JSON (لقد وضعت نقطة توقف على إجراء وحدة التحكم ولم يتم ضربها في هذه الحالة).

أنا في حيرة تمامًا وأحاول حل هذه المشكلة منذ أيام.أي مساعدة سيكون موضع تقدير كبير.

شكرًا.

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

المحلول

أعتقد أنه قد يكون بسبب الخاص بك .getJSON الطلب يستدعي المسار النسبي Home/TabList.

عندما تكون في الصفحة الرئيسية، على سبيل المثال. http://localhost/, ، ال .getJSON سوف يتصل الطلب http://localhost/Home/TabList والذي، كما تقول، يعمل.

ولكن عندما تكون في صفحة لاحقة، على سبيل المثال: http://localhost/Home/About ال .getJSON سوف يتصل الطلب http://localhost/Home/About/Home/TabList والذي كما تقول لن ينجح :-)

على أية حال، حاول استدعاء المسار المطلق /Home/TabList

على سبيل المثال

$.getJSON('/Home/TabList', null, function (json) {

ملحوظة:الشرطة المائلة للأمام الإضافية في البداية.

هثس،
تشارلز

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