如何在ASP.NET中使用User.Identity.Name作为SqlDataSource的参数?

时间:2010-10-05 12:57:05

标签: c# asp.net parameter-passing sqldatasource

对于SqlDataSource,我可以为传入参数配置外部源。 例如,它可能是QueryString,Session,Profile等。 但是我没有选择将User用作源。

我知道我可以在插入,选择,更新,删除事件中为参数提供值。但我认为这不是一个优雅的解决方案,因为我已经在aspx文件中定义了一些参数。我不希望在两个单独的地方定义参数。它变得一团糟。

我可以在.aspx文件中以某种方式定义此参数吗?

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

3 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:2)

您还可以通过在页面上创建隐藏文本框,将User.Identity.Name应用于值,然后在SQL数据源中使用formcontrol参数来完成此操作。这里的优点是您可以在select,insert,delete和update参数中重用代码而无需额外的代码。

所以在aspx中我们有(noneDisplay是一个隐藏它的css类):

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

并在sql数据源更新部分的Update参数中:

<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; 

这项技术在我们所有应用程序的许多地方都运作良好。

答案 2 :(得分:1)

在asp页面中添加了一个带有连接字符串的空白数据源

e.g。

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