32 votos

Es allí una manera de utilizar "<%= someObject.ClientID %>" en un archivo javascript externo?

Hay una manera de usar "<%= someObject.ClientID %>" en un archivo javascript externo?

Si yo uso el código

<%= someObject.ClientID %>

en una etiqueta de secuencia de comandos dentro de mi como(c/p)x la página, funciona bien. Se muestran en la página, el ClientID se ha resuelto. Howvever, si me pongo en un archivo JS externo y sólo tiene que añadir:



No. Es allí una manera de hacer esto o estoy atascado con el abandono de ese código en el como(c/p)x archivo?

Lado de la pregunta: ¿qué es el acto de hacer <%=... %> en el archivo de marcado llamado?

32voto

Beygi Puntos 1273

Si usted realmente quiere hacer esto, usted puede hacer lo siguiente

<%@ Page ContentType="text/javascript" Language="C#" AutoEventWireup="false" %>
<%@ OutputCache Duration="86400" Location="Any" VaryByParam="None" %>

var time = "<%= DateTime.Now.ToString() %>";
alert(time);

Y, a continuación, hacer referencia a ella en su página

<script src="Scripts/file.aspx" type="text/javascript"></script>

Nota Cuando se utiliza mencionado método, la única manera de pasar de la página de destino de los controles de cliente-id, es la de almacenar el id de cliente como una cadena en una propiedad pública, y, a continuación, hacer referencia a ella mediante nueva instancia de esa página

Si la única cosa que tenía que hacer esto es cliente-id, a continuación, puede utilizar los siguientes ASP.NET 4 característica

<any-tag ID="myCustomId" runat="server" ClientIDMode="Static" />

Usted también puede poner todo lo que tu cliente-id en C# de la clase, a continuación, serializar mediante JSON y los muestran en una etiqueta de secuencia de comandos, podría ser una manera inteligente de ASP.NET antes de la versión 4.

Nota el uso de la serialización método tiene la posibilidad de cambiar cualquier etiqueta id sin tener que preocuparse acerca de javascript elemento usos, recuerde que esto no es posible, incluso con ASP.NET 4 ClientIDMode

Ver

La Página De Código Del Archivo

public partial class About : System.Web.UI.Page
{
    ...

    protected string GetTagIds()
    {
        return new JavaScriptSerializer()
                    .Serialize(new
                     {
                            myButton = Button1.ClientID,
                            myCalendar = Calendar1.ClientID
                     });
    } 

    ...
}

Página ASPX

<script type="text/javascript">
    var IDs = <%= GetTagIds() %>;
</script>

En cualquier lugar

<script type="text/javascript">
    IDs.myCalendar.doSomthing...
</script>

Hay otra opción que te puede pasar todos los archivos javascript para ASP.NET controlador pero no lo recomiendo, porque en un único archivo javascript que hacer asp.net controlador de ocupado.

Los Bloques De Código

<% código en línea %>

Esta es una línea de definición de código que puede ejecutar códigos en :

<% Response.Write("Hi"); %>

<% while(i < 0) { %>
      <% 
         Response.Write(i.ToString()); 
         i++;
      %>
<%}%>

Nota: Usted tiene que incluir ';' final de cada instrucción, cuando el uso de código en línea con el lenguaje C#, puede cambiar el lenguaje en línea mediante la página de la directiva atributo de idioma

<%= inline expresión %>

Este uno es igual a la llamada de Respuesta.Escriba su auto, vea:

<%= "Hi" %> equals to <% Response.Write("Hi"); %>

Nota: no debe incluir ';' cuando se utiliza en línea de expresión

<%: codificado en línea expresión %>

Este uno es igual a :

Response.Write(HttpUtility.HtmlEncode("<script type="text/javascript">alert('XSS');</script>"))

Y se utilizan por razones de seguridad --XSS, cualquier HTML de entrada a éste salidas HTML de texto codificado que es seguro para el usuario de la pantalla de contenidos ingresados en la página.

Nota: no debe incluir ';' cuando se utiliza codificado en línea de expresión

<%$ expressionPrefix: expressionField %>

Esta es la expresión que se puede utilizar para enlazar los valores de ConnectionStrings, Recursos y AppSettings

expressionPrefix de las posibilidades de las

  • AppSettings
  • ConnectionStrings
  • Recursos

expressionField es la propiedad de determinados expressionPrefix que usted necesita, consulte:

// AppSettings
<asp:Label ... Text="<%$ AppSettings: version %>" />

// ConnectionStrings
<asp:SqlDataSource ... ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" />

// Resources
<asp:Label ... Text="<%$ Resources: Messages, Welcome %>" />

Nota: no debe incluir ';' y se pueden utilizar expresiones sólo en ASP.Net controles de atributos

<%# de enlace de datos de la expresión %>

Usted puede utilizar esto en cualquier lugar dentro de los controles de enlace de datos de apoyo, y por lo general es utilizada por la Evaluación y los métodos de enlace.

<asp:DropDownList SelectedValue='<%# Bind("CategoryID") %>' 
                  DataSourceID="CategoriesDataSource"
                  DataTextField="CategoryName"
                  DataValueField="CategoryID"
                  runat="Server" />

Que uno Eval o Enlazar?

Usando Bind tiene dos vías de enlace conjunto de más de atributo especificado de ASP.NET control de ver el mencionado desplegable, es el uso de Bind que significa que si el usuario final, se selecciona un valor y, a continuación, enviar la página desplegable no se apartará de su valor seleccionado.

El uso de Eval sólo para la visualización de datos.

<asp:FormView ...>
     <ItemTemplate>
          <a href='Eval("Link")'>Eval("LinkText")</a>
     </ItemTemplate>
</asp:FormView>

<%@ plantilla de texto de la directiva %>

<%@ Page ...%>
This one is Page Directive

<%@ OutputCache...%>
This one is OutputCache Directive and so on...

20voto

ajax81 Puntos 3215

Esto es totalmente posible.

En su capa de presentación (su .página aspx), crear una secuencia de comandos referencia a una página aspx que contiene el código javascript:

<script src="../MyJavaScriptFile.js.aspx" type='text/javascript'></script>

Luego, en MyJavaScriptFile.js.aspx, se puede escribir la siguiente:

<%@ Page Language="C#" AutoEventWireup="false"  ContentType="text/javascript" %>

    <% 
        CustomPersonObject cpt = new CustomPersonObject();
        cpt.firstname = "John";
        cpt.lastname  = "Smith";
    %>

// Start Javascript
var personFirstName = '<% HttpContext.Current.Response.Write(cpt.name);%>';
var personLastName = '<% HttpContext.Current.Response.Write(cpt.lastname);%>'

Una técnica frecuentemente uso es para pasar el valor necesito evaluados en mi archivo javascript como un parámetro de url en el guión inicial de referencia:

 <script src="../MyJavaScriptFile.js.aspx?username=<% somevalue %>" 
       type='text/javascript'></script>

Luego, en MyJavaScriptFile.js.aspx, puedo referencia el valor con

<% Request.QueryString["username"] %>

No es la "mejor práctica" manera de hacer las cosas, pero hace el trabajo de una manera que mi hombre de las cavernas cerebro puede entender sin tener que recurrir a la fantasía de soluciones y código adicional. También, la mayoría de mis javascripts son muy específicos a la implementación y me puede conseguir lejos con esto (yo no tiene que preocuparse acerca de código para su reutilización).

3voto

Mark B Puntos 586

Esto agrega un poco más de HTML, pero funciona; envuelva cada control de servidor en un div...

<div id="myContainer">
    <asp:HiddenField ID="hdMyControl" runat="server" /></div>

Establecer el HiddenField del valor en el código detrás de

hdMyControl.Value = "something";

A continuación, en su archivo JS externo usted puede conseguir el control de servidor del valor

$(document).ready(function () {
    var myValue= $('#myContainer input[type=hidden]').val();

No estoy seguro de que no importa, pero voy a agregar la referencia de script a la página mediante el código subyacente utilizando RegisterClientScriptBlock

1voto

The Evil Greebo Puntos 3491

No, no funciona así, porque el archivo javascript se transmite de forma independiente como un archivo independiente y no es analizado por ASP.NET en el camino, mientras que su aspx archivo ESTÁ siendo analizada y la .NETA del motor es la sustitución de la etiqueta con el valor real.

Ahora cuando los objetos de llamar a los JS funciones, lo que podría hacer es pasar referencias a sí mismos dentro de la función, o incluso pasar en un diccionario de la lista de algún tipo con su propia llave, por lo que el control y el nombre asignado.

Una cosa que pensar así - SI vas a hacer un archivo JS independiente de una página ASPX, luego de que el archivo JS absolutamente no debe presumir de saber nada acerca de los controles específicos del archivo aspx que llama - porque más tarde de que alguien pueda decidir, "Oh, eso es un buen archivo JS, voy a incorporar también" y no trabajo para ellos porque sus objetos no coincide con la suya. Así, el patrón debe seguir tendría que ser más genérico - así pues, ¿por qué te gustaría que pase en las referencias o las listas de identificadores.

1voto

Michael Puntos 1100

Usted podría crear un vacío de la función de devolución de llamada en el archivo externo:

var MyCallback = function () { };

Y, a continuación, en el asp/cx hacer algo como:

MyCallback = function () {return "<%= someObject.ClientID %>";}

Y luego, de regreso en su archivo externo:

var myClientID = MyCallback();

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: