إعادة توجيه المستخدمين من تحرير صفحة إلى صفحة الاتصال

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

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

هل تخزين الدعوة للتسجيل في الدورة ؟ كما الكوكيز ؟ أنا مثل مفهوم استخدام كائن التعامل مع إعادة توجيه.

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

المحلول

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

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

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.UrlReferrer == null)
        {
            //Handle the case where the page is requested directly
            throw new Exception("This page has been called without a referring page");
        }

        if (!IsPostBack)
        {   
            ReturnUrl = Request.UrlReferrer.PathAndQuery;
        }
    }

    public string ReturnUrl
    {
        get { return ViewState["returnUrl"].ToString();  }
        set { ViewState["returnUrl"] = value; }
    }

    protected void btn_Click(object sender, EventArgs e)
    {
        //Do what you need to do to save the page
        //...

        //Go back to calling page
        Response.Redirect(ReturnUrl, true);
    }
}

نصائح أخرى

هذه الرسالة يكون معلم asp.net ولكن أعتقد أنه هو منصة مستقلة مسألة آلام كل جديد من مطوري الويب كما أنها تسعى إلى "تنظيف" طريقة للقيام بذلك.

أعتقد الخيارين في تحقيق هذه هي:

  1. المعلمة في url
  2. Url المخزنة في الدورة

أنا لا أحب طريقة url هو فوضوي قليلا ، عليك أن تتذكر أن تشمل المعلمة في كل ذات الصلة URL.

أنا فقط استخدام كائن مع أساليب ثابتة لهذا.الكائن سوف يلتف حول الدورة البند كنت تستخدم لتخزين إعادة توجيه عناوين url.

أساليب ربما يكون على النحو التالي (كل الجمهور ثابت):

  • setRedirectUrl(string URL)
  • doRedirect(سلسلة defaultURL)

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

ثم دعونا نقول أن ينقر المستخدم حذف ، فإنها تحتاج إلى إعادة توجيهك إلى صفحة عرض بعد حذف العمل ، حتى في حذف العمل تسمونه RedirectClass.setRedirectUrl("/المشروع/إطلالة كل").هذه الطريقة قد تبدو لمعرفة ما إذا كان توجيه متغير في الدورة.إذا كان الأمر كذلك إعادة توجيه إلى عنوان URL هذا.إذا لا إعادة توجيه إلى url الافتراضي (السلسلة التي تم تمريرها إلى setRedirectUrl الأسلوب).

أنا أتفق مع "rmbarnes.myopenid.com" فيما يتعلق بهذه المسألة باعتبارها منصة مستقلة.

أود أن متجر الدعوة الصفحة URL في QueryString أو في حقل مخفي (على سبيل المثال في ViewState على ASP.NET).إذا كنت سوف تخزينه خارج نطاق الصفحة (مثل الدورة العالمية متغير - تطبيق الدولة وهلم جرا) وبعد ذلك سوف لا يكون مجرد مبالغة كما قال توم ولكنها سوف تجلب لك المتاعب.

أي نوع من المشاكل ؟ مشكلة إذا كان المستخدم لديه أكثر من علامة تبويب واحدة (نافذة) من هذا المتصفح المفتوحة.علامات التبويب (أو ويندوز) من نفس المتصفح ربما تشترك في نفس الدورة و توجيه لن يكون أحد يتوقع وجميع يشعر المستخدم أنه علة.

بلدي 2 eurocents..

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

باستخدام كائن يعني أيضا يمكنك في وقت لاحق توسيع لو المطلوبة (مثل إضافة العودة الرسائل وغيرها من المعلومات).

على سبيل المثال (هذا هو 2 دقيقة التوجيهي الخام BTW!):

public partial class _Default : System.Web.UI.Page 
{

    void Redirect(string url, string messsage)
    {
        RedirectionParams paras = new RedirectionParams(url, messsage);
        RedirectionHandler(paras); // pass to some global method (or this could BE the global method)
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Redirect("mypage.aspx", "you have been redirected");
    }
}

public class RedirectionParams
{
    private string _url;

    public string URL
    {
        get { return _url; }
        set { _url = value; }
    }

    private string _message;

    public string Message
    {
        get { return _message; }
        set { _message = value; }
    }

    public RedirectionParams(string url, string message)
    {
        this.URL = url;
        this.Message = message;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top