Frage

habe ich eine Benutzersteuerung, die eine Gridview enthält. Das Gridview hat sowohl eine Hyperlinkspalte und eine Vorlage Spalte, die ein HyperLink-Steuerelement enthält.

Das ASP.NET-Projekt ist wie folgt aufgebaut, mit der Default.aspx-Seite in jedem Fall der Benutzersteuerung.

  • Application Root
    • Steuerungen
      • Usercontrol mit Gridview
    • SystemAdminFolder
      • Default.aspx
      • Edit.aspx
    • OrganisationAdminFolder
      • Default.aspx
      • Edit.aspx
    • StandardUserFolder
      • Default.aspx
      • Edit.aspx

. Hinweis: Die Ordner verwendet werden, um dem Anwender die richtige Rolle, um sicherzustellen,

Ich brauche die DataNavigateUrlFormatString für die Hyperlink einstellen zu können und die NavigateUrl für den Hyper-Link Entschlossenheit zur Edit.aspx Seite in dem entsprechenden Ordner.

Wenn ich die navigate URL zu „Edit.aspx“ der URL festgelegt in dem Browser erscheint als ' http: // Anwendung Root / Steuerung / Edit.aspx'. Unabhängig von dem Ursprungsverzeichnis

Ich kann den Web-Anwendung Root-Operator (~ /) als Pfad Bedürfnisse verwenden, um zu sein in Bezug auf die aktuelle Seite, nicht die Anwendung Wurzel.

Wie kann ich die gleiche Benutzersteuerung in mehreren Ordnern verwenden und die URL auf eine andere Seite im selben Ordner lösen?

Hinweis: Die Frage stark ab einer ähnlichen Frage basiert von azhar2000s auf dem asp .net-Foren dass paßt mein Problem.

War es hilfreich?

Lösung

Während diese Frage eingeben bis ich auf eine mögliche Lösung kam und haben weiter modifiziert dies mit Feedback von @Thomas.

Ändern Control.AppRelativeTemplateSourceDirectory ändert die relativen Pfade durch die Steuerung erzeugt wird. Ich habe es auf einen Wurzel relativ virtuellen Pfad für den aktuellen Anfragen Ordner. Jetzt alle relativen Pfade in dem Usercontrol mit der angeforderten Seite relativ anstatt der Benutzersteuerpfad.

//Page Load Event for the User Control
protected void Page_Load(object sender, EventArgs e)
{
    string rootPath = HttpContext.Current.Request.ApplicationPath;
    if (!rootPath.EndsWith("/"))
    {
        rootPath += "/";
    }

    Uri requestUri = HttpContext.Current.Request.Url;
    string folderPath = requestUri.AbsolutePath.Remove(0, rootPath.Length);
    string lastSegment = requestUri.Segments[requestUri.Segments.Length - 1];
    folderPath = folderPath.Remove(folderPath.LastIndexOf(lastSegment));

    AppRelativeTemplateSourceDirectory = "~/" + folderPath;
}

Andere Tipps

Ich würde es in dem Load-Ereignis des Rasters gesetzt oder die Seite wie folgt:

var hyperlinkColumn = this.GridView1.Columns[0] as HyperLinkColumn;
hyperlinkColumn.DataNavigateUrlFormatString = "~/SystemAdminFolder/{0}";

Diese Struktur setzt voraus, dass die URL soll auf der Grundlage der DataNavigateUrlField pro Zeile unterschiedlich sein. Wenn es die gleiche URL für alle Zeilen sein sollte, dann können Sie nur die NavigateUrl Eigenschaft auf Last gesetzt. Natürlich würden Sie einen anderen Ordner festgelegt, basierend auf der Rolle des Benutzers.

ADDITION Nach dem, was Sie in Ihrem Problem in den Kommentaren erwähnt, was ich vorschlagen, die Role-Ordner Beziehung irgendwo speichert. Sie haben eine Reihe von Möglichkeiten:

  1. Einfach speichern magisch genannt Schlüssel in appSettings (Role_SystemAdministrators, Role_OrganizationAdministrators, etc.) mit dem Namen des Ordners, an die sie gerichtet werden. Der Vorteil dieses Ansatzes ist, dass es einfach ist. Der Nachteil besteht darin, dass die Daten richtig eingegeben hat, gibt es nichts zu jemandem Anschlag versehentlich eine Rolle zu zwei Ordnern abbildet und wenn eine Rolle hinzugefügt wird, muss sich in einem weiteren Platz aktualisiert werden.

  2. Erstellen Sie eine benutzerdefinierte ConfigSection die Beziehung zu speichern. Der Vorteil ist, dass Sie sicherstellen können, dass jede Rolle nur einmal aufgeführt ist. Der Nachteil ist, dass es zusätzlicher Code, die Sie haben zu schreiben, und wenn eine Rolle hinzugefügt wird, müssen Sie noch etwas an einem anderen Ort hinzuzufügen.

  3. Lesen Sie die location-Tags aus der Konfigurationsdatei. Der Vorteil ist, dass Sie vermeiden können einen Wert in mehr als einem Ort zu schreiben. Der Nachteil ist, dass dies zu tun eine lästige Pflicht sein wird. Du müsstest den ersten Tag mit dem angegebenen Ordner auf dem der aktuelle Benutzer die Erlaubnis gegeben assoziiert finden.

  4. Lesen Sie die Werte aus der Datenbank. Der Vorteil ist, dass man leicht einen Management-Bildschirm, um die Werte zu aktualisieren schreiben können. Der Nachteil ist, wenn eine Rolle hinzugefügt wird man etwas zu einem ganz anderen Ort der Anwendung hinzufügen müssen.

Sie würden noch Ordnerberechtigungen festlegen, wie Sie jetzt tun. Allerdings, wenn Sie diese Beziehung gespeichert haben, können Sie die Person in den entsprechenden Ordnern umleiten, ohne Schreib benutzerdefinierten Forking Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top