Pergunta

Eu estou tentando usar uma diretiva de pré-em uma página ASPX, mas a página não reconhecê-lo. Este é apenas algo que eu não posso fazer?

Fundo: Eu estou tentando incluir a versão completa do jQuery no modo de depuração (para, assim, depuração =)), ea versão minified para a liberação. Eu tentei isso, mas eu não sou terrivelmente familiar com o ASPX <% sintaxe. Am I apenas fundamentalmente mal-entendido que esta sintaxe faz?

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
Foi útil?

Solução

diferença interessante aqui - usando # if DEBUG nos puxa página aspx da tag no web.config, mas quando você usá-lo no código-behind, ele puxa de depuração do constante da configuração de compilação no arquivo de projeto . Então, eles estão realmente acessando dois diferentes configurações.

Assim, tanto quanto eu posso dizer, isso não é realmente possível.

Outras dicas

Uma abordagem melhor pode ser usar código do lado do servidor para incluir o script. Eu usaria algo como

protected void Page_Load(object sender, EventArgs e)
{
#if DEBUG    
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    #else
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    #endif
}

Para mim a solução mais elegante seria a de simplesmente definir um campo em code-behind com as directivas de pré-processamento e, em seguida, verificar a existência de seu valor a partir da página aspx.

No code-behind:

public partial class WebClient : System.Web.UI.Page
{        
#if DEBUG 
    public bool DebugMode = true;
#else
    public bool DebugMode = false;
#endif
}

aspx:

<%if(this.DebugMode){%>
    <script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
    <script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>

Eu tentei o seu código, e funcionou muito bem para mim. I ativado ou desativado DEBUG da seção system.web / compilação no web.config, funcionando como um Web site (não fez teste como uma aplicação web; pode ser diferente ...).

Para ver o que o código faz, colocar um erro de sintaxe intencional na página, e tentar executá-lo com o modo de depuração ativado. O compilador irá gerar um link na página de erro que lhe permitirá visualizar a fonte.

Dica:. as directivas de pré-processador são inserido na saída

Line 218:     #if DEBUG 
Line 219:              
Line 220:              #line default
Line 221:              #line hidden
Line 222:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\r\n");
Line 223:              
Line 224:              #line 14 "F:\Test\test.aspx"
Line 225:     #else 
Line 226:              
Line 227:              #line default
Line 228:              #line hidden
Line 229:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:              
Line 231:              #line 16 "F:\Test\test.aspx"
Line 232:     #endif

É claro, existem outros (melhor) maneiras de fazer o que você está depois ...

Eu tentei conseguir isso muitas maneiras ao longo dos anos sem qualquer sucesso. depois de jogar com asp.net MVC, recentemente, eu tenho essa idéia. Há uma outra possibilidade de manter tudo em aspx usando tipos MIME inválidos. Em asp.net MVC, os modelos são carregados com MIME inválido tipos, de modo que o navegador não irá analisá-los. I seguiu o mesmo padrão aqui; Wola! Sucesso ... Você precisa de uma função estática que lhe dá acesso fácil a restrição de depuração.

<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>' 
    **type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script> 

Ops.IsRelease () é public static function que retorna a depuração constaraint

    Public Shared Function IsRelease() As Boolean
        Dim [release] = False
#If Not debug Then
        [release]=True
#End If
        Return [release]
    End Function

Eu tive o mesmo problema, eu tentei resolvê-lo tanto em aplicação ASP.MVC e aplicação webform. A depuração #if sempre retornam verdade, nunca leva em conta a definição de compilação web.config. Eu resolvi-lo de maneira semelhante ao conselho Syam postou neste post, mas em vez de função estática eu uso variável astatcic como descrito aqui: http://www.psworld.pl/Programming/DebugDirective

Aqui está a minha solução:

protected void Page_Load(object sender, EventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    }
    else
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    }
}

Eu não acho que você pode ter diretivas de pré-processamento no aspx infelizmente.

A maneira mais simples para ir é simplesmente ter uma propriedade em seu código-behind que alimentações no jQuery URL, então você pode definir directivas de pré-processador declará-la. Ou se você preferir manter o URL no código-frente você poderia usar um controle Literal e alternar a sua visibilidade no código-behind com base nas directivas do processador.

Por exemplo:

código-frente:

<asp:literal id="litJQuery" EnableViewState="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
</asp:literal>
<asp:literal id="litJQueryDebug" EnableViewState="false" Visible="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
</asp:literal>

code-behind, no método Page_Load:

#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top