2009-02-17 2 views
8

Я не могу понять, почему это не работает ниже. Мне нужно привязать текстовое поле к значению из встроенного выражения. Кажется, что это просто? Но ни одна из них не работает. Есть идеи? Заранее спасибо.ASP.net Inline Expression Issue

<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> 
<asp:textbox id="tbName" runat="server" Text='<%= "test" %>' /> 

Edit: Я должен упомянуть, что эта страница не имеет коды позади и только следующие директивы сверху.

<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Page Language="C#" %> 

Edit:

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

<script language="C#" runat="server"> 
    private void Page_Load(object sender, System.EventArgs e) 
    { 
     tbName.Text = "test"; 
    } 
</script> 

ответ

14

В Page_Load из вас придется сделать вызов страницы .DataBind() для

<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> 

для работы.

<% =%> является сокращенным ответом.Write() и никогда не действует как атрибут для любого тега сервера.

<% #%> можно использовать, только если conatainer является привязкой к базе данных (страница в вашем случае).

<% $%> может использоваться для доступа к данным в файлах ресурсов.

EDIT: Вы также можете взглянуть на How to 'bind' Text property of a label in markup, что является смехотворным вопросом.

1
<asp:textbox id="tbName" runat="server"><%="test"%></asp:textbox> 
+0

Не работает, я просто получить "блоки кода не поддерживаются в этом контексте.". Я должен упомянуть, что у моей страницы нет кода, я не уверен, что это важно. – James

2

Попробуйте добавить RUNAT = "сервер" к элементам сервера. В противном случае этот элемент не будет обрабатываться на сервере.

EDIT: Собственно, «правильно», что это не работает; Код <% = ...%> не может быть оценена в теге сервера, только такие выражения, как, например, <% $ Resources: h1%>

+0

К сожалению, это была опечатка с моей стороны, элементы управления установлены на сервер runat = и все еще не работают. – James

2

Вам может понадобиться пространство имен для элемента управления текстового поля

<%@ Import "System.Web.UI.WebControls" %> 
+0

Пробовал это, и все равно не повезло. – James

+0

вы также можете попробовать System.Web.UI. Вот где определена функция Eval. – Nick

5

Как указано, <% =%> является незаконным в любом месте объявления управления сервером, за исключением случаев, когда внутренняя разметка анализируется как содержимое (например, < ItemTemplate> внутри ретранслятора).

<% #%> действителен как выражение для свойств управления, поскольку эти выражения будут вычисляться при вызове DataBind() в элементе управления.

Ваше использование Eval() выглядит немного подозрительным. В примере пример Eval() будет использовать текущий объект страницы в качестве контекста привязки, что означает, что значение публичного свойства с именем «test» будет связано с вызовом DataBind(). Если у вас на самом деле нет этого свойства, определенного в классе страницы, выражение никогда не будет оценивать.

Eval() в основном предназначен для использования в выражениях в таких элементах управления, как Repeater, GridView, ListView и т. Д., Где есть список элементов данных, связанных с шаблонами, и вам нужен способ, чтобы иметь доступ к свойства текущего элемента данных.

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

Если вы хотите более умную альтернативу, используя <% $%> синтаксис, что позволяет избежать связывания данных в целом, идут сюда:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

4

Использование <asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />

и установить tbName.DataBind(); в случае загрузки страницы.

Для тех, кто ищет дополнительную информацию о встроенных выражениях, обратитесь к следующим ссылкам.

ASP.net имеют следующую inline expressions