Как использовать User.Identity.Name в качестве параметра для SqlDataSource в ASP.NET? - PullRequest
10 голосов
/ 05 октября 2010

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

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

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

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

Ответы [ 3 ]

14 голосов
/ 05 октября 2010

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

ASPX

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

1010 * отделенный код *

protected void Page_Init(object sender, EventArgs e) {
    DataSource.SelectParameters["username"].DefaultValue = User.Identity.Name;
}
2 голосов
/ 11 сентября 2015

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

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

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

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

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

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

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

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

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

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

1 голос
/ 01 сентября 2014

на странице asp положить пустой источник данных со строкой соединения

, например

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

в коде на странице загрузки

  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();
}
...