ASP.NET - هل من الممكن تشغيل إعادة النشر من رمز الخادم؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

هل من الممكن تشغيل إعادة النشر برمجيًا من كود الخادم في ASP.NET؟أعلم أنه من الممكن إجراء Response.Redirect أو Server.Transfer لإعادة التوجيه إلى الصفحة، ولكن هل هناك طريقة لتشغيل إعادة النشر إلى نفس الصفحة في رمز الخادم (أي. دون استخدام خداع جافا سكريبت لإرسال نموذج)؟

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

المحلول

يتم بدء عمليات إعادة النشر في Asp.net من العميل (عادةً إرسال النموذج).لست متأكدًا مما تحاول تحقيقه.بعض من جانب الخادم دورة حياة الصفحة تم تنفيذ الأحداث بالفعل وما تحاول القيام به هو رفع معالجات الأحداث السابقة مرة أخرى.

نصائح أخرى

تحدث عمليات إعادة النشر بسبب إرسال نموذج.تحتاج إلى البدء بها من العميل.

يمكنك القيام بذلك بطلب Ajax.يجب أن يكون لديك صفحة تستقصي الخادم.لا توجد طريقة يمكن للخادم من خلالها إرسال المعلومات إلى المتصفح دون طلبها.ولكن وجود بعض جافا سكريبت التي تعمل في الخلفية وتستقصي الخادم كل 5 ثوان (أو أكثر، اعتمادا على احتياجاتك) ربما يكون الحل الأفضل.

ألحق

إذا اتبعت هذا المسار، فيمكنك مطالبة الخادم بإرسال نعم أو لا فقط، أو حتى 0 أو 1 فقط اعتمادًا على ما إذا كان يجب إجراء إعادة النشر أم لا.اعتمادًا على احتياجاتك، لا يوجد أي سبب لاستخدام جزء XML من AJAX فعليًا.ما عليك سوى تشغيل طلب غير متزامن بسيط، ربما مع عدد قليل من متغيرات سلسلة الاستعلام، والحصول على كلمة واحدة بسيطة، أو حتى رقم كرد.وبهذه الطريقة يمكنك الاحتفاظ بجافا سكريبت لإنشاء ملف XML وتحليله إذا لم تكن هناك حاجة إليه.

إذا كنت تتطلع إلى بدء الاتصال من الخادم، بدلاً من الاستقصاء، فقم بإلقاء نظرة على Microsoft سيجنال آر.السياق الأسهل لهذا، والذي يحتوي عليه SignalR كجزء من رمز المثال الخاص به هو تطبيق الدردشة.ستتمكن من بدء الرسائل من الكود الموجود خلفها واستلامها كأحداث جافا سكريبت على صفحتك.

رمز الخادم المراد إرساله:

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }
    }
}

يعد رمز العميل لالتقاط رسائل الخادم بمثابة تجاوز لـ "chat.client.broadcastMessage":

<script type="text/javascript">
        $(function () {
            // Declare a proxy to reference the hub. 
            var chat = $.connection.chatHub;
            // Create a function that the hub can call to broadcast messages.
            chat.client.broadcastMessage = function (name, message) {
                // Html encode display name and message. 
                var encodedName = $('<div />').text(name).html();
                var encodedMsg = $('<div />').text(message).html();
                // Add the message to the page. 
                $('#discussion').append('<li><strong>' + encodedName
                    + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
            };
            // Get the user name and store it to prepend to messages.
            $('#displayname').val(prompt('Enter your name:', ''));
            // Set initial focus to message input box.  
            $('#message').focus();
            // Start the connection.
            $.connection.hub.start().done(function () {
                $('#sendmessage').click(function () {
                    // Call the Send method on the hub. 
                    chat.server.send($('#displayname').val(), $('#message').val());
                    // Clear text box and reset focus for next comment. 
                    $('#message').val('').focus();
                });
            });
        });
    </script>

بالنسبة لأولئك الذين يستخدمون إصدارات أحدث من .NET، عليك استخدام Page.ClientScript.GetPostBackEventReference منذ 'this.GetPostBackEventReference(...)' عفا عليه الزمن.ربما أيضا Page.ClientScript.RegisterStartupScript(...

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