2016-03-31 12 views
0

Gibt es eine Möglichkeit, einen Filter innerhalb von Kentico 7 durchzuführen, bevor Seiten/Inhalt geliefert werden?Anfrage/Route Filter in Kentico 7

Mein Szenario ist Ich muss einen Abfragezeichenfolgenparameter überprüfen, und wenn es nicht gültig ist, wird der Client auf eine andere Seite umgeleitet. Ich weiß, dass dies einfach über JavaScript erledigt werden kann, aber das Ausschalten von JS in Ihrem Browser kann das einfach umgehen.

Antwort

0

Es gibt Ereignisse in CMSPages_PortalTemplate und es `s Basisklassen wie:

protected override void OnPreRender(EventArgs e) 
    protected override void OnError(EventArgs e); 
    // 
    // Summary: 
    //  Init event handler. 
    protected override void OnInit(EventArgs e); 
    // 
    // Summary: 
    //  Load event handler. 
    protected override void OnLoad(EventArgs e); 
    // 
    // Summary: 
    //  PreInit event handler. 
    protected override void OnPreInit(EventArgs e); 
    // 
    // Summary: 
    //  PreRender event handler. 
    protected override void OnPreRender(EventArgs e); 
    // 
    // Summary: 
    //  Unload event handler. 
    protected override void OnUnload(EventArgs e); 
    // 
    // Summary: 
    //  Render event handler. 
    protected override void Render(HtmlTextWriter writer); 
    . 
    . 
    . 

Aber ich bin nicht sicher, und ich bezweifle, es ist nicht Best Practice. Vielleicht könnten Sie Ihr Problem und die Art der Querystring genauer beschreiben, warum und wo Sie validieren möchten.

+0

Es muss nur ein Wert validiert werden, der aus der Abfragezeichenfolge stammt. Wenn die Validierung korrekt ist, wird die Seite normalerweise geladen, wenn nicht, wird der Benutzer umgeleitet. Das ist alles was es gibt. – AnimaSola

0

Wenn ich an Ihrer Stelle bin, erstelle ich eine einfache Webparts wie "RandomRedirection". Hier ist der Pfad der Datei dieser Web-Teile in der Version 8 ~/CMSWebParts/General/RandomRedirection.ascx.cs. Sie können den Abfragezeichenfolgenparameter in Ihrem Webpartscode testen und die Umleitung entsprechend vornehmen. Hier

ist ein Beispiel für Code inspiriert von RandomREdirection Webparts (sorry, ich habe nicht die Version 7 installiert lokal so meinen Code nicht in dieser Version getestet wird, aber mit der Version 8)

using System; 

using CMS.Helpers; 
using CMS.PortalControls; 
using CMS.PortalEngine; 

public partial class CMSWebParts_General_RandomRedirection : CMSAbstractWebPart 
{ 
    #region Webpart properties 

    /// <summary> 
    /// URL to redirect if the query value is not correct. 
    /// </summary> 
    public string RedirectionURL 
    { 
     get 
     { 
      return ValidationHelper.GetString(GetValue("RedirectionURL"), ""); 
     } 
     set 
     { 
      SetValue("RedirectionURL", value); 
     } 
    } 

    #endregion 


    #region Webpart methods 

    /// <summary> 
    /// Content loaded event handler. 
    /// </summary> 
    public override void OnContentLoaded() 
    { 
     base.OnContentLoaded(); 
     SetupControl(); 
    } 


    /// <summary> 
    /// Initializes the control properties. 
    /// </summary> 
    protected void SetupControl() 
    { 
     if (!StopProcessing) 
     { 
      if ((RedirectionURL.Trim().Length > 0) && 
       PortalContext.ViewMode.IsLiveSite()) 
      { 
       string newURL = URLHelper.ResolveUrl(RedirectionURL.Trim()); 
       if ((RequestContext.CurrentURL != newURL) && 
        (URLHelper.GetAbsoluteUrl(RequestContext.CurrentURL) != newURL)) 
       { 
        var value = QueryHelper.GetString("queryName", String.Empty); 
        //Test value of your query parameter 
        if (!value.Equals("queryValue")) 
        { 
         newURL = URLHelper.RemoveParameterFromUrl(newURL, "queryName"); 
         URLHelper.ResponseRedirect(newURL); 
        } 
       } 
      } 
     } 
    } 


    /// <summary> 
    /// Reloads the control data. 
    /// </summary> 
    public override void ReloadData() 
    { 
     base.ReloadData(); 
     SetupControl(); 
    } 

    #endregion 
} 

Setzen Sie Ihre Webparts in der oberen Zone Ihrer Masterseite und hier geht's.

Hoffe, das hilft!