Problema de expresión en línea ASP.net
data-binding (6)
Parece que no puedo 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: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 y solo las siguientes directivas en la parte superior.
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%@ Page Language="C#" %>
Editar:
La única solución factible que podría llegar a agregar un código detrás es agregar un script de servidor en línea, como este. 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>
Como se indicó, <% =%> es ilegal en cualquier lugar dentro de una declaración de control del servidor, excepto cuando el marcado interno se está analizando como contenido (por ejemplo, <ItemTemplate> dentro de un Repeater).
<% #%> es válido como una expresión para propiedades de control, ya que estas expresiones se evaluarán cuando se llame a DataBind () en el control.
Sin embargo, tu uso de Eval () parece un poco sospechoso. Por ejemplo, Eval () usará el objeto de página actual como el contexto de enlace, lo que significa que el valor de la propiedad pública llamada "prueba" se vinculará cuando se llame a DataBind (). 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 dentro de controles como Repeater, GridView, ListView, etc., donde hay una lista de elementos de datos vinculados mediante plantillas, y necesita un método para poder acceder a las propiedades de la corriente elemento de datos.
Para todos los demás controles, solo use expresiones de código normales 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 la reflexión en tiempo de ejecución.
Si desea una alternativa más inteligente utilizando la sintaxis <% $%> que evite el enlace de datos por completo, vaya aquí:
http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
Es posible que necesite el espacio de nombres para el control de cuadro de texto
<%@ Import "System.Web.UI.WebControls" %>
Intente agregar runat = "server" a los elementos del servidor. De lo contrario, este elemento no se procesará en el servidor.
EDITAR: En realidad, "es correcto" que esto no funciona; el código <% = ...%> no se puede evaluar en una etiqueta de servidor, solo expresiones como por ejemplo <% $ Recursos: h1%>
<asp:textbox id="tbName" runat="server"><%="test"%></asp:textbox>
Utilice <asp:textbox id="tbName" runat="server" Text=''<%# Eval("test") %>'' />
y establece tbName.DataBind();
en el evento de carga de página.
Para aquellos que buscan más información sobre expresiones en línea, consulte los siguientes enlaces.
ASP.net tiene las siguientes expresiones en línea
Bloques de código incrustados
<% ... %>
Mostrando la expresión
<%= ... %>
Expresión de directiva
<%@ ... %>
Expresión de enlace de datos
<%# ... %>
Constructor de expresiones
<%$ ... %>
Los comentarios del lado del servidor bloquean
<%-- ... --%>
En el Page_Load de usted tendrá que hacer una llamada a Page.DataBind () para
<asp:textbox id="tbName" runat="server" Text=''<%# Eval("test") %>'' />
trabajar.
<% =%> es una respuesta abreviada. Write () y nunca es válido 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 usar para acceder a los datos en los archivos de recursos.
EDITAR: También puede ver Cómo "enlazar" la propiedad de texto de una etiqueta en el marcado, que es una pregunta muy similar.