Это верно, что в большинстве целей, C++ содержит все, что делает C. Адвокаты языка будут быстры, чтобы указать, что существуют некоторые совершенно особые пограничные случаи, которые являются допустимым C, но не допустимым C++.
Одним таким примером могло бы быть объявление
int virtual;
C, которое объявляет целое число, названное "виртуальным". С тех пор "виртуальный" ключевое слово в C++, это не допустимый C++.
В комментарии вы написали:
Также, если бы я мог получить какие-либо элементы управления значение, установленное для этого имени пользователя, я мог бы затем укажите, что мой параметр 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>
Если это то, что вы ищите, вам следует подумать о редактировании исходного вопроса ...
Сработает ли это?
<asp:LoginName ID="LoginName1" runat="server" />
Я не уверен в этом, но, думаю,
<asp:Label ID="Label1" runat="server" Text='<%# User.Identity.Name %>' />
Двойные кавычки не верны для выражений, определенных в свойстве. Вместо использования вышеупомянутого выражения вы также можете напечатать значение в некоторой HTML-этикетке, просто написав свое выражение, т.е.
<span><%# User.Identity.Name %></span>
И убедитесь, что вы достаточно хорошо аутентифицировали пользователя.
<asp:Label ID="Label1" runat="server" Text='<%= User.Identity.Name %>' />
Проблема заключается в двойных кавычках. Часто нужно использовать одинарные кавычки
Это действительно нужно для управления сервером этикеток? Или вы можете просто использовать теги 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>
Он все еще пишет реальный код, а не хранит все в разметке. Но я подозреваю, что это самое близкое из возможных вариантов.
Один из способов - установить его в исходном коде:
Label1.Text = User.Identity.Name.ToString();
Другой способ - использовать построитель выражений, такой как CodeExpressionBuilder Рикардо Переса, для привязки свойство control из разметки aspx:
<asp:Label runat="server" Text="<%$ Code: User.Identity.Name.ToString() %> />
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.
Если вы действительно хотите передать текущее имя пользователя в качестве параметра выбора в 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" />