2009-02-17 9 views
8

Me parece que no puede entender por qué esto no funciona a continuación. Necesito vincular el cuadro de texto a un valor de una expresión en línea. Parece una cosa simple ¿no? Pero ninguno de estos funciona. ¿Algunas ideas? Gracias por adelantado.ASP.net Inline Expresión Edición

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

Editar: Debo mencionar que esta página no tiene código detrás y sólo las siguientes directivas en la parte superior.

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

Editar:

La única solución viable que podría llegar a menos que la adición de un código subyacente es la adición de una secuencia de comandos de servidor en línea, como éste. Desearía saber por qué las expresiones en línea no funcionarán a menos que estés en un contexto de enlace de datos.

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

Respuesta

14

En el Page_Load de que tendrá que hacer una llamada a la página .DataBind() para

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

para funcionar.

<% =%> es una respuesta abreviada. Escritura() y nunca es válida como atributo para ninguna etiqueta de servidor.

<% #%> se puede usar, solo si el contenedor está enlazado a datos (la página en su caso).

<% $%> se puede utilizar para acceder a los datos en los archivos de recursos.

EDITAR: También puede consultar How to 'bind' Text property of a label in markup, que es una pregunta muy similar.

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

No funciona apenas consigo "Los bloques de código no se admiten en este contexto.". Debo mencionar que mi página no tiene código, no estoy seguro de que importe. – James

2

Trate de añadir runat = "server" a los elementos del servidor. De lo contrario, este elemento no se procesará en el servidor.

EDIT: En realidad, "la correcta" que esto no funciona; código <% = ...%> no puede ser evaluada en una etiqueta de servidor, sólo expresiones como por ejemplo <% Recursos $:% h1>

+0

Disculpe que fue un error tipográfico de mi parte los controles están configurados en runat = server y todavía no funciona. – James

2

Es posible que necesite el espacio de nombres para el control de cuadro de texto

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

Intenté eso, y todavía no tuve suerte. – James

+0

también puedes probar System.Web.UI. Ahí es donde se define la función Eval. – Nick

5

como se ha indicado, <% =%> es ilegal en cualquier lugar dentro de una declaración de control de servidor, excepto donde el marcado interior se analiza como contenido (por ejemplo < ItemTemplate> dentro de un repetidor).

<% #%> es válida como una expresión de las propiedades de control, como se evaluarán estas expresiones cuando DataBind() es llamado en el mando.

Su uso de eval() se ve un poco sospechoso sin embargo. Por ejemplo, Eval() utilizará el objeto de página actual como el contexto de unión, lo que significa que el valor de la propiedad pública denominada "prueba" estará obligado a cuando DataBind() se llama. A menos que realmente tenga esta propiedad definida en la clase Page, la expresión nunca se evaluará a nada.

Eval() está destinado principalmente para su uso en expresiones como Repeater, GridView, ListView, etc., donde hay una lista de elementos de datos vinculados mediante plantillas, y necesita un método para poder acceder al propiedades del elemento de datos actual.

Para todos los otros controles, sólo tiene que utilizar expresiones normales de código dentro de una expresión de enlace de datos - es mucho más rápido y más intuitivo que Eval(), que se basa en el tiempo de ejecución reflexión.

Si desea una alternativa más inteligente usando <% $%> sintaxis que evita enlace de datos por completo, haga clic aquí:

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

4

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

y establecer tbName.DataBind(); en el evento de carga de la página.

Para quienes buscan más información sobre expresiones en línea, consulte los siguientes enlaces.

ASP.net tiene la siguiente inline expressions