Как использовать 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;
Этот метод хорошо работал во многих местах во всех наших приложениях.