Как использовать ASP.NET текущее имя пользователя в SqlParameter без кода - позади

Это верно, что в большинстве целей, C++ содержит все, что делает C. Адвокаты языка будут быстры, чтобы указать, что существуют некоторые совершенно особые пограничные случаи, которые являются допустимым C, но не допустимым C++.

Одним таким примером могло бы быть объявление

int virtual;

C, которое объявляет целое число, названное "виртуальным". С тех пор "виртуальный" ключевое слово в C++, это не допустимый C++.

7
задан Keith 16 October 2009 в 20:37
поделиться

8 ответов

В комментарии вы написали:

Также, если бы я мог получить какие-либо элементы управления значение, установленное для этого имени пользователя, я мог бы затем укажите, что мой параметр sql - это параметр управления, и это даст мне там, где мне тоже нужно быть.

Вы можете создать настраиваемый тип параметра.

Начните с создания этого класса либо в App_Code, либо в dll управления сервером ASP.NET:

namespace ParameterDemo {
    public class LoginParameter : Parameter {
        public LoginParameter(string name)
            : base(name)
        {}

        protected override object Evaluate(HttpContext context, Control control)
        {
            //UPDATED as suggested in Joels comments below...
            //return HttpContext.Current.User.Identity.Name;
            return context.Current.User.Identity.Name;
        }
    }
}

и зарегистрировав его на странице ( сразу после директивы @Page)

<%@ Register TagPrefix="put" Namespace="ParameterDemo" %>

(или, при желании, зарегистрируйте его в web.config для использования на всех страницах)

... и вы можете использовать его так:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    SelectCommand="SELECT * FROM MyTable WHERE SomeValue=@SomeParameter">
    <SelectParameters>
        <put:loginParameter name="SomeParameter" />
    </SelectParameters>
</asp:ObjectDataSource>

Если это то, что вы ищите, вам следует подумать о редактировании исходного вопроса ...

8
ответ дан 6 December 2019 в 11:50
поделиться

Сработает ли это?

<asp:LoginName ID="LoginName1" runat="server" />
1
ответ дан 6 December 2019 в 11:50
поделиться

Я не уверен в этом, но, думаю,

<asp:Label ID="Label1" runat="server" Text='<%# User.Identity.Name %>' />

Двойные кавычки не верны для выражений, определенных в свойстве. Вместо использования вышеупомянутого выражения вы также можете напечатать значение в некоторой HTML-этикетке, просто написав свое выражение, т.е.

<span><%# User.Identity.Name %></span>

И убедитесь, что вы достаточно хорошо аутентифицировали пользователя.

1
ответ дан 6 December 2019 в 11:50
поделиться
<asp:Label ID="Label1" runat="server" Text='<%= User.Identity.Name %>' />

Проблема заключается в двойных кавычках. Часто нужно использовать одинарные кавычки

0
ответ дан 6 December 2019 в 11:50
поделиться

Это действительно нужно для управления сервером этикеток? Или вы можете просто использовать теги span, отображаемые серверным элементом управления?

<span runat="server" ID="Label2"><%= User.Identity.Name %></span>

Обновление:
Хорошо, новая цель: получить User.Identity.Name в значение SqlParameter без использования внутреннего кода.

Это будет непросто. Базовый кодовый тег bee-stings ( <%%> и т.п.) не запускается в жизненном цикле страницы до тех пор, пока ваш запрос уже не будет выполнен. Это означает, что вам нужно самостоятельно обработать более раннее событие жизненного цикла страницы, а это обычно означает добавление чего-либо в код. Если вы действительно хотите избавиться от кода программной части, вы, конечно, можете включить серверный скрипт на свою страницу:

<%@ Page Lanuage="C#" %>
<script runat="server" language="c#">
    public void OnSelecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
       e.Command.Parameters["@UserName"].Value = User.Identity.Name;
    }
</scirpt>
<html>
<body>
    <asp:SqlDataSource runat="server" ID="MyDataSource" OnSelecting="OnSelecting" ...>
    <SelectParameters>
        <asp:Parameter Name="UserName" ... />
    </SelectParameters>
    </asp:SqlDataSource>

    <asp:GridView runat="server" ID="ResultsGrid" DataSourceID="MyDataSource" .../>

</body>
</html>

Он все еще пишет реальный код, а не хранит все в разметке. Но я подозреваю, что это самое близкое из возможных вариантов.

2
ответ дан 6 December 2019 в 11:50
поделиться

Один из способов - установить его в исходном коде:

Label1.Text = User.Identity.Name.ToString();

Другой способ - использовать построитель выражений, такой как CodeExpressionBuilder Рикардо Переса, для привязки свойство control из разметки aspx:

<asp:Label runat="server" Text="<%$ Code: User.Identity.Name.ToString() %> />
0
ответ дан 6 December 2019 в 11:50
поделиться

I suspect that you forgot to call DataBind() on your form. Label3 or Label5 should work perfectly.

Add a call to form1.Databind() in your Page_Load() and that should fix it.

0
ответ дан 6 December 2019 в 11:50
поделиться

Если вы действительно хотите передать текущее имя пользователя в качестве параметра выбора в SqlDataSource, я бы предложил создать быстрый настраиваемый параметр (либо в виде файла кода в вашем веб-проекте, либо в отдельном сборка, если хотите):

namespace CustomParameters
{
    public class UserNameParameter : Parameter
    {
        public UserNameParameter()
        {
        }

        public UserNameParameter(string name)
            : base(name)
        { }


        protected override object Evaluate(HttpContext context, Control control)
        {
            return User.Identity.Name;
        }
    }
}

а затем на вашей странице:

<%@ Register TagPrefix="myNS" Namespace="CustomParameters" %>

...

<myNS:UserNameParameter Name="UserName" />
4
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: