إعادة توجيه إلى وحدة تحكم (ولكن مع رئيسية مختلفة) باستخدام البدل جامعا

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

سؤال

ولدي مشكلة حيث أريد أن عرض وجهة نظر مختلفة (صفحة رئيسية مختلفة)، اعتمادا على المكان الذي أتت منه، ولكن لا تعرف من أين تبدأ ...

ولدي العديد من الطرق التي قبض مختلف أنواع مختلفة من عناوين المواقع التي تحتوي على هياكل مختلفة.

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

routes.MapRoute(
    "Product",
    "products/{product}.htm",
    new { controller = "Product", action = "ShowProduct" }
);

routes.MapRoute(
    "ProductReview",
    "products/{product}/reviews.htm",
    new { controller = "Product", action = "ShowProductReview" }
);

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);

هل هذا ممكن؟ وإذا كان الأمر كذلك، كيف؟

وشكرا جزيلا مقدما.

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

المحلول

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

وأنا لا أعرف إذا كان هذا هو ما كنت أبحث عنه، ولكن قد يكون خيارا.

نصائح أخرى

وكان لي نفس مشكلة

public class FriViewPage : ViewPage
{
    public override string MasterPageFile
    {
        get
        {
            return "~/Views/Shared/Site.Master"; // base.MasterPageFile;
        }
        set
        {
            if (ViewData["agent"].ToString() == "steve")
                base.MasterPageFile = "~/Views/Shared/Site.Master";
            else
                base.MasterPageFile = "~/Views/Shared/Site2.Master";
        }
    }
}

وبعد ذلك فقط ضمان جميع الآراء ترث من FriViewPage بدلا من ViewPage

وربما يكون الشياطين تعمل ولكن هل يمكن وضع بعض التعليمات البرمجية في codebehind عرض الشريك أن ننظر إلى URL ثم تعيين الصفحة الرئيسية برمجيا هناك؟

وأنا لست متأكدا كيف يمكنك تغيير برمجيا الصفحة الرئيسية، وأنا لم تفعل ذلك، ولكن أنا متأكد من أنها من الممكن (من المحتمل أن يكون مجرد خاصية على الصفحة).

وهذا قد يكون من المفيد يسأل كما سؤال آخر.

والواقع أبدا يظهر جالبة MasterPageFile ليتم استدعاؤها

ويمكنك تغيير MasterPage عن طريق تعديل ViewResult قبل التقديم. على سبيل المثال، يمكن لعمل تحكم به:

public ActionResult TestMP(int? id)
{
    ViewData["Title"] = "MasterPage Test Page";
    ViewData["Message"] = "Welcome to ASP.NET MVC!";
    ViewResult result = View("Index");
    if (id.HasValue)
    {
        result.MasterName = "Site2";
    }
    return result;
}

هل يمكن أن تنجز الشيء نفسه مع عامل تصفية العمل من أجل التوصل إلى حل أكثر عمومية.

scroll top