سؤال

كنت آمل إنشاء مربع حوار LightBox / مشروط لتسجيل الدخول إلى موقع الويب الخاص بي الذي تم بناؤه باستخدام ASP.NET MVC. ومع ذلك، فإن الطريقة الوحيدة التي يمكنني التفكير فيها هي وضع المنطق في أحداث onclick للأحداث الارتباطات التشعبية عند ربط الأقسام المحظورة. أفضل ذلك، لذلك، لا يزال بإمكاني استخدام مرشح Authrisation Action Filter، وعند النقر فوق ارتباط إلى طريقة عمل يتطلب Authrisation، فسيؤدي ذلك إلى إظهار مربع الحوار Lightbox / Modal قبل الإدخال إلى الرابط الفعلي. السبب في ذلك أنا لا أريد التشكيل المهمة المتداولة المتمثلة في اليكتذت إلى وضع الأحداث اللازمة للروابط.

الطريقة الوحيدة لتنفيذ هذا والتي يمكنني التفكير فيها هي تشكيل دفع / مذنب ajax من الخادم إلى العميل لإظهار المربع في عامل تصفية Authrisation قبل استيقاد وحدة التحكم. ليس هناك أيضا الكثير من المستندات من أداء Ajax يدفع / مذنب في ASP.NET MVC.

هل هناك طريقة أبسط؟

نافذة تسجيل الدخول Digg هي مثال على ذلك.

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

المحلول

استخدم فئة لتزيين الروابط بالإجراءات التي تتطلب تسجيل الدخول إذا كان لديك بعض التي تفعل بعضها وبعضها لا، عند عدم السماح بالطلب. عندما ينقر شخص ما على ارتباط يحتاج إلى إذن، ثم منبثق مربع الحوار مشروط. يجب أن ينشر مربع الحوار هذا إلى إجراء تسجيل الدخول الخاص بك مع عنوان URL الفعلي للارتباط الذي تم النقر عليه تعيين كمعلمة ErturnUrl للعمل. إذا فشل تسجيل الدخول، إعادة التوجيه إلى طريقة العرض "تسجيل الدخول" (إلحاق العودة إلى إجراءات النشر لنموذج تسجيل الدخول).

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

<% if (!Request.IsAuthenticated) { %>
$(function() {
    $('#loginDialog').hide().dialog({
         modal: true,
         ...
    });
    $('a.requires-login').click( function() {
         returnUrl = $(this).attr('href');
         $('#loginDialog').find('#returnUrl').val(returnUrl);
         $('#loginDialog').dialog('open');
         return false;
    });
<% } %>

<% if (!Request.IsAuthenticated) { %>
<div id="loginDialog">
    <% using (Html.BeginForm("Login","Account")) { %>
         <%= Html.TextBox( "returnUrl", null, new { style = "display: none;" } ) %>
         ... rest of form ...
    <% } %>
</div>
<% } %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top