MVC 3 Razor تمت إضافته ديناميكيًا Ajax.Action Link يعمل فقط لأول مرة في IE8
-
28-09-2019 - |
سؤال
أنا جديد جدًا في مجال تطوير الويب (حوالي شهر) وقد واجهت شيئًا غريبًا.
أنا أستخدم 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 بدلاً من ذلك.