Laden...

asp:SqlDataSource + Parameter (aktueller UserName)

Erstellt von hape vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.021 Views
hape Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren
asp:SqlDataSource + Parameter (aktueller UserName)

Hallo,

kann sich jemand vorstellen, warum innerhalb einer asp:SqlDataSource, wenn mit SelectParameters gearbeitet wird, eine Filterung auf den aktuell angemeldeten User zwar möglich ist, indem man über das Profil geht (ProfileParameter), um den Benutzernamen zu holen, jedoch nicht, wenn man einen normalen Parameter nimmt.

Mit asp:ProfileParameter GEHT ES (!):

 <asp:SqlDataSource ID="sql1" runat="server" ConnectionString="<%$ ConnectionStrings:PRODDB %>" selectCommand="SELECT [Irgendwas] FROM [testtabelle] WHERE ([Benutzer] = @Benutzer)">
 
  <SelectParameters>
    <asp:ProfileParameter Name="Benutzer" PropertyName="UserName" Type="String" />
  </SelectParameters>
</asp:SqlDataSource>

Das selbe ist aber nicht möglich ist, wenn mit einem asp:Parameter gearbeitet wird. Mit "User.Identity.Name" GEHT ES NICHT:

 <asp:SqlDataSource ID="sql1" runat="server" ConnectionString="<%$ ConnectionStrings:PRODDB %>" selectCommand="SELECT [Irgendwas] FROM [testtabelle] WHERE ([Benutzer] = @Benutzer)"> 
  <SelectParameters>
    <asp:Parameter Name="Benutzer" Type="String" DefaultValue="<% User.Identity.Name %>"/>
  </SelectParameters>
</asp:SqlDataSource>

und mit einem asp:Parameter "Membership.GetUser().UserName" GEHT ES AUCH NICHT:

 <asp:SqlDataSource ID="sql1" runat="server" ConnectionString="<%$ ConnectionStrings:PRODDB %>" selectCommand="SELECT [Irgendwas] FROM [testtabelle] WHERE ([Benutzer] = @Benutzer)"> 
  <SelectParameters>
    <asp:Parameter Name="Benutzer" Type="String" DefaultValue="<% Membership.GetUser().UserName %>" />
  </SelectParameters>
</asp:SqlDataSource>

Ich versteh das nicht, vielleicht gibts jemanden, dem da was auffällt. Es ist bei meinen Tests immer ein User angemeldet gewesen. Wie macht Ihr so etwas in der Art?
Gruß Hape

L
667 Beiträge seit 2004
vor 17 Jahren

Ich nehme mal an, es geht nicht, da der User nur Zugriff auf seine eigenen Profildaten hat. Ist aber nur mal von der Logik her getippt, um dazu was fundiertes zu sagen, bin ich selbst noch zu grün was ASP.NET angeht (ich versuche auch grad mich da rein zu arbeiten).

"It is not wise to be wise" - Sun Tzu

N
4.644 Beiträge seit 2004
vor 17 Jahren

Hast Du mal versucht den Parameter im CodeBehind im Selecting-Event zu setzen?

hape Themenstarter:in
121 Beiträge seit 2006
vor 17 Jahren

Hallo Noodles,
danke für den Tipp, das war auch mein Workaround. Schade ist halt, dass die Selektions-Logik dann in zwei Sourcen verteilt ist. Mir geht es hier darum, herauszufinden, was die beste Praxis ist.

    
protected void sql1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters["@Benutzer"].Value = Membership.GetUser().UserName;
    }

Danke fürs Mitgrübeln und viele Grüße
Hape