Как использовать User.Identity.Name как параметр для SqlDataSource в ASP.NET?

Для SqlDataSource я могу настроить внешний источник входящего параметра. Например, это могут быть QueryString, Session, Profile и т.д. Однако у меня нет возможности использовать User в качестве источника.

Я знаю, что могу указать значение для параметра Вставка, Выбор, Обновление, Удаление событий. Но я не думаю, что это ellegant решение, потому что у меня есть некоторые параметры, уже определенные в aspx файле. Я не хочу, чтобы параметры были определены в двух разных местах. Это создает беспорядок.

Так можно ли каким-то образом определить этот параметр в файле .aspx?

    <SelectParameters>
        <asp:QueryStringParameter DefaultValue="-1" Name="ID" 
            QueryStringField="ID" />
        //User.Identity.Name goes here as a value for another parameter  
    </SelectParameters> 

Ответ 1

Объявите его в своем .aspx и заполните его в своем коде:

ASPX

<asp:Parameter Name="username" Type="String" DefaultValue="Anonymous" />

отделенного кода

protected void Page_Init(object sender, EventArgs e) {
    DataSource.SelectParameters["username"].DefaultValue = User.Identity.Name;
}

Ответ 2

на странице asp введите пустой источник данных с помощью строки соединения

например.

<asp:SqlDataSource ID="SqlDataSourceDeviceID" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>">
<asp:DropDownList ID="DropDownListDeviceID" runat="server" DataSourceID="SqlDataSourceDeviceID" DataTextField="DevLoc" DataValueField="DeviceId"></asp:DropDownList>

в коде позади pageload

  protected void Page_Load(object sender, EventArgs e)
    {
if (!IsPostBack) {
   String myQuery =String.Format("SELECT DeviceID,DevLoc  FROM  ... where UserName='{0}')",User.Identity.Name);
   SqlDataSourceDeviceID.SelectCommand = myQuery;
   SqlDataSourceDeviceID.DataBind();
   DropDownListDeviceID.DataBind();
}

Ответ 3

Вы также можете выполнить это, создав скрытое текстовое поле на странице, примените имя пользователя .Identity.Name к значению, а затем используйте параметр formcontrol в источнике данных SQL. Преимущество здесь в том, что вы можете повторно использовать код в параметрах выбора, вставки, удаления и обновления без дополнительного кода.

Итак, в aspx мы имеем (noneDisplay - класс css, чтобы скрыть его):

<asp:TextBox runat="server" ID="txtWebAuthUser" CssClass="noneDisplay"></asp:TextBox>

и в параметре Update секции обновления данных sql datasource:

<asp:ControlParameter Name="CUrrentUser"  ControlID="txtWebAuthUser" Type="String" PropertyName="Text" />

который интерпретируется в обновлении примерно так:

UpdateCommand="UPDATE [Checks] SET [ScholarshipName] = @ScholarshipName, [Amount] = @Amount,[email protected],
         [LastModified] = getdate() WHERE [CheckId] = @CheckId"

а затем в загрузке формы файла .cs у нас есть:

this.txtWebAuthUser.Text = User.Identity.Name; 

Этот метод хорошо работал во многих местах во всех наших приложениях.