对于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>
答案 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();
}