Passing Windows User Id as parameter to SQLDataSou

2019-08-26 10:26发布

问题:

First question is, Am I on the right path?.ıs there a better way to pass it as parameter? If I am on the right path, please show me how can I solve the below error.

The following solution does not help me with this problem: HTTPContext.Current.User.Identity.Name not working inside a control?

My code:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyDbConn %>" 
    SelectCommand="SELECT id, Bookname, RequestType, Requestor, RequestDate FROM Requests WHERE (Requestor LIKE '%' + @Requestor + '%')">
    <SelectParameters>
        <asp:Parameter DefaultValue= "<%# HttpContext.Current.User.Identity.Name.Split('\\')[1] %>" Name="Requestor" />
    </SelectParameters>
</asp:SqlDataSource>

Gives the below error:

回答1:

try this

public Requests()
{
   this.Init += (_o, _e) => 
   {
       this.SqlDataSource1.Selecting += (o, e) =>
       {
           (o as SqlDataSourceView)
             .SelectParameters["Requestor"].DefaultValue = 
                      HttpContext.Current.User.Identity.Name;
       }
   }
}

or

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            SqlDataSource1.SelectParameters["Requestor"].DefaultValue = 
                          HttpContext.Current.User.Identity.Name;
        }
    }


回答2:

Try this i didn't Check It

replace the # to =

<asp:Parameter DefaultValue= "<%= HttpContext.Current.User.Identity.Name.Split('\\')[1] %>" Name="Requestor" />


回答3:

well.... it says u can't use the <%# %> (databinding expression) on this control.

I'm not familiar with this control, but you could try setting te property value at the beginning of the page life cycle.