2010-10-05 70 views
10

對於SqlDataSource,我可以配置傳入參數的外部源。 例如,它可能是一個QueryString,Session,Profile等等。 但是我沒有選擇使用用戶作爲來源。如何使用User.Identity.Name作爲ASP.NET中SqlDataSource的參數?

我知道我可以在插入,選擇,更新,刪除事件中爲參數提供值。但我不認爲這是一個優雅的解決方案,因爲我已經在aspx文件中定義了一些參數。我不想在兩個不同的地方定義參數。它使混亂。

那麼我能以某種方式在.aspx文件中定義這個參數嗎?

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

回答

13

聲明它在你的.aspx並填寫您的代碼隱藏:在asp網頁放

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

應該是'.DefaultValue'而不是'.Value'在C#代碼 – lincolnk 2010-10-05 13:50:51

+0

謝謝Jan,但這是我想避免的。在你的例子中,我需要填充代碼隱藏參數的值。所以我必須在兩個獨立的地方處理參數:在aspx文件和cs文件中。我不能在aspx中聲明參數,並在aspx中爲它綁定值嗎? – Wodzu 2010-10-06 06:30:35

+0

您可以通過使用'」/>' – 2010-10-06 06:51:00

1

具有連接字符串的空白數據源

例如,

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

您還可以通過創建頁面上的文本框隱藏做到這一點,User.Identity.Name應用到值,然後使用在formcontrol參數SQL數據源。這樣做的好處是您可以在選擇,插入,刪除和更新參數時重新使用代碼而無需額外的代碼。

所以在ASPX我們(noneDisplay是一個CSS類來隱藏它):

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

,並在SQL數據源更新部分的更新參數:

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

這項技術在我們所有應用程序的很多地方都運行良好。

+0

這是否不會留下一個空洞的安全漏洞,您可以通過更改隱藏文本框中的變量來模擬其他用戶? – 2017-09-21 07:56:44

+0

在頁面加載時進行設置,因此用戶的任何更改都不會被看到。 – 2017-09-21 18:24:12

相關問題