mkt

2009-11-24 19 views
6

'daki tüm sayfalarda querystring'i koruyun. Asp.net mvc (C#) uygulamamdaki tüm sayfalarda querystring'i korumalıyım.mkt

Örnek için: Bir sayfa arayacağım www.example.com?Preview=True. Querystring, www.example.com'u tıklattığım sayfa ne olursa olsun korunmalıdır. Yani www.example.com numaralı telefondan About us sayfasını tıklattığımda, URL www.example.com/AboutUs?Preview=True

Bunu nasıl başarabilirim? Bu ortak işlemi yapmak için en iyi yer nedir.

+0

t Tasarımı ile ilgili bir sorun olup olmadığı konusunda düşünmemelisiniz, sanırım bunu yapmamalısınız. – Matias

+0

Kullanıcı ikinci web sitesinin önizlemesini ana web sitesinden tıklarsa, ikinci web sitesindeki tüm denetimleri devre dışı bırakmak için bu seçeneği vermem gerekiyor. – Prasad

cevap

0

@ eu-g'den mükemmel bir yön E-ne.

Her url'ye rota değerini eklemek için @ eu-ge-ne'den özel rota fikrini kullandım ve oturumda Önizleme anahtarını işlemek için bir temel denetleyici kullandım.

if ((requestContext.HttpContext.Request.QueryString != null && 
    requestContext.HttpContext.Request.QueryString["Preview"] != null && 
    requestContext.HttpContext.Request.QueryString["Preview"].ToString() =="True") || 
    (requestContext.HttpContext.Request.UrlReferrer != null && 
    requestContext.HttpContext.Request.UrlReferrer.ToString().Contains("Preview=True"))) 
    { 
     //Add the preview key to session 
    } 
    else 
    { 
     //Remove the preview key to session 
    } 

bir taban kontrol cihazının Initialize yönteminde yukarıda kod kullanılmıştır. Bu şekilde önizleme anahtarı, querystring'in Önizleme'ye sahip olması durumunda oturumda olacaktır, aksi halde oturumdan kaldırılır.

Bir kez daha @ eu-ge-ne'ya teşekkürler.

0

Varolan sorgu dizesini yeni yardımcınızla oluşturduğunuz tüm bağlara ekleyen bir görünüm Yardımcısı oluşturabilirsiniz.

Bu help

Sen oturumda bu bilgileri depolamak iyi olabilir olabilir.

System.Web.HttpContext.Current.Session.Add("Preview", true); 

GÜNCELLEME:

2

Belki özel bir rota ?:

public class PreviewRoute : System.Web.Routing.Route 
{ 
    ... 

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
    { 
     var preview = System.Web.HttpContext.Current.Session["Preview"]; 

     if (!values.ContainsKey("Preview")) 
      values.Add("Preview", preview); 

     var path = base.GetVirtualPath(requestContext, values); 

     return path; 
    } 
} 

}

her an Session["Preview"] ayarlayın ve ?Preview=True ile tüm URL'ler alacak ihtiyaç

Kullanım Global.asax.cs bu rota:

routes.Add("Default", 
    new PreviewRoute("{controller}/{action}/{id}", new MvcRouteHandler()) { 
     Defaults = new RouteValueDictionary(
      new { controller = "Home", action = "Index", id = "" } 
     ) 
    } 
); 

yerine: Global.asax.cs yılında

public static class CustomRouteExtensions 
{ 
    public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults) { 
     routes.MapPreviewRoute(name, url, defaults, null); 
    } 

    public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults, object constraints) { 
     if (routes == null) { 
      throw new ArgumentNullException("routes"); 
     } 

     if (url == null) { 
      throw new ArgumentNullException("url"); 
     } 

     var route = new PreviewRoute(url, new MvcRouteHandler()) { 
      Defaults = new RouteValueDictionary(defaults), 
      Constraints = new RouteValueDictionary(constraints) 
     }; 

     if (String.IsNullOrEmpty(name)) { 
      routes.Add(route); 
     } 
     else { 
      routes.Add(name, route); 
     } 
    } 
} 

: Bu uzantıyı deneyebilirsiniz Ayrıca

routes.MapRouteLowercase(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

:

routes.MapPreviewRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 
+0

Bu özel rota nerede kullanılır? – Prasad

+0

oturum dışında başka bir yolu var mı? Çünkü onu entegre ettiğimde birkaç sorunum var .. Kullanıcı önizlemeyi tıklattığında, önizlemede engellenen tüm kontrollerle ikinci web sitesini gösterir.Ve aynı zamanda, kullanıcı bunu canlı olarak görüntülediğinde, o zaman bile kontroller, – Prasad

+0

oturumunda "Önizleme" tuşuna sahip olduğu için devre dışı bırakılır. Eğer kullanıcı Önizleme'den Canlı moduna geçerse, bunu kaldırmak istersiniz ". Önizleme "oturumun anahtarı. – jrista