MVC 3 Razor تمت إضافته ديناميكيًا Ajax.Action Link يعمل فقط لأول مرة في IE8

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

سؤال

أنا جديد جدًا في مجال تطوير الويب (حوالي شهر) وقد واجهت شيئًا غريبًا.

أنا أستخدم VS2010 وMVC 3 Razor لإنشاء تطبيق بسيط.

لدي جدولين يحتويان على نفس النوع من المعلومات.كما هو الحال في كل من الجدول (أ) والجدول (ب) يحتفظان بالمستخدمين.الفرق هو أن الجدول "أ" يحتوي على مستخدمين موجودين في "الدور"، بينما يحتوي الجدول "ب" على المستخدمين الذين ليسوا في "الدور".

يحتوي كلا الجدولين على عمودين، أحدهما باسم المستخدم والآخر يحمل Ajax.ActionLink.

لذا، لإضافة مستخدم إلى الجدول "ب"، انقر فوق "Ajax.Actionlink" في الجدول "أ".يتم حفظ "الإضافة" من خلال إجراء MVC، وأقوم بنقل صف الجدول باستخدام حدث AjaxOption OnSuccess.يقوم حدث OnSuccess بشكل أساسي بنقل الصف وتغيير Ajax.ActionLink بحيث يقوم ActionLink الخاص بصف المستخدم المُضاف حديثًا بإزالة المستخدم.

آمل أن يكون هذا واضحا.

كل هذا يعمل بشكل جيد.يمكنني إضافة المستخدم "أ" إلى الجدول "أ" وكل شيء يعمل بشكل جيد.يمكنني إزالة المستخدم "أ" من الجدول "أ" إلى الجدول "ب" وكل شيء على ما يرام.لكن لا يمكنني إعادة إضافة المستخدم "أ" إلى الجدول "أ".يتم تشغيل OnSuccess، وبالتالي يتم نقل الصف، ولكن لا يتم استدعاء حدث الإجراء.لذلك، إذا قمت بتحديث الشاشة، أستطيع أن أرى أن هذه الخطوة لم تحدث بالفعل.إنه نفس الشيء إذا بدأت بالمستخدم "B" في الجدول "B".كما أن تحديث الصفحة (F5) لا يؤدي إلى إصلاح الروابط، ويظل معطلاً حتى أقوم بإغلاق الصفحة وإعادة فتحها.

يبدو كل شيء جيدًا في HTML، ويظهر في شريط الحالة أنه عندما أقوم بالنقر فوق الارتباط، يتم استدعاء href الصحيح، لكن عازف الكمان لا يسجل أي استدعاء ولا يتم استدعاء الإجراء.

أظن أن لدي نوعًا من المشكلات الملزمة، لكنني ضائع هنا.كل شيء يعمل بشكل جيد في فايرفوكس

الرجاء المساعدة.الكود أدناه، مع إضافة التعليقات.تذكر أن هذا يعمل على الإضافة والإزالة والإزالة والإضافة، ولكن إعادة الإضافة وإعادة الإزالة تستدعي الوظيفة فقط ولكنها لا تستدعي الإجراء.لذلك أعرف أن الإجراءات مكتوبة بشكل صحيح وما إلى ذلك.

//// element is the ID of the element i am Moving
//// targetElement is the ID of the tbody i am moving the element to
function move_element(element, targetElement) {
    try 
    {
       //// get the HTM 
       var elementHTML = $("tr[id=" + element + "]").children(".Action").html();
       //// based on the tbody id
       switch (targetElement) 
       {
       case "AssignedToGroup":
            //// Change the target body for next call to this function
            elementHTML = elementHTML.replace("AssignedToGroup", "UnassignedToGroup");
            //// change th action name
            elementHTML = elementHTML.replace("AddGroupRole", "DeleteGroupRole");
            //// change the display label
            elementHTML = elementHTML.replace("Assign", "Remove");
            break;
       case "UnassignedToGroup":
            elementHTML = elementHTML.replace("UnassignedToGroup", "AssignedToGroup");
            elementHTML = elementHTML.replace("DeleteGroupRole", "AddGroupRole");
            elementHTML = elementHTML.replace("Remove", "Assign");
            break;
     }
     //// Create the new Ajax <td> element
      $("tr[id=" + element + "]").children(".Action").replaceWith("<td  class='Action'>" + elementHTML +  "</td>")
      //// Add the row to the other body
      $("tr[id=" + element + "]").appendTo($("tbody[id=" + targetElement + "]"));
   }
   catch (e) 
   {
     alert(e.Message); ////NO ERROR IS RAISED
   }
}
هل كانت مفيدة؟

المحلول

كنت أبحث في مشكلة مماثلة واجهتك ووجدت حلاً هنا: مشكلة في ذاكرة التخزين المؤقت مع Ajax.ActionLinksكي تختصر:

  • كان أحد الاقتراحات هو استدعاء هذا: $.ajaxSetup({ cache: false }); إذا كنت تستخدم دعم JavaScript غير مزعجة لـ JQuery.
  • وكان اقتراح آخر للاستخدام "HttpMethod = "POST" في Ajaxoptions.

على أي حال، نأمل أن يكون هذا مفيدًا لك أو لشخص آخر، لذلك قمت بنشره هنا.

نصائح أخرى

لا يمكن معرفة ذلك.لذا في النهاية استخدمت jquery.ajax بدلاً من ذلك.

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