Respondida Recursos con rutas relativas/absolutas

  • lunes, 21 de junio de 2010 7:06
     
     

    Hola,

    Estamos desarrollando una aplicación prototipo con ASP.NET MVC 2.0.

    En las rutas de nuestros recursos (scripts, hojas de estilos, vistas,...) estamos utilizando rutas absolutas. En desarrollo todo funciona perfectamente  cuando ejecutamos la aplicación con WebDev WebServer (Cassini) de Visual Studio.

    El problema viene cuando montamos un deploy y ejecutamos la aplicación en un directorio virtual. Todas las rutas absolutas se ejecutan sobre la ruta base de la aplicación y no sobre la ruta completa que incluye el nombre del directorio virtual.

    Una posible solución sería iniciar todas las rutas con "~/", pero esto no sirve para los recursos definidos en código cliente.

    Existe alguna solución sencilla para no tener que definir todos los recursos de una aplicación MVC con rutas relativas?

    Gracias.

Todas las respuestas

  • lunes, 21 de junio de 2010 7:12
     
     

    Hola,

    puedes utilizar el helper Url.Content() para obtener la ruta de los recursos de tu sitio web, por ejemplo:

    <script src="<%= Url.Content("~/Scripts/jquery-1.4.1.min.js")%>" type="text/javascript"></script>

    Otra posibilidad es utilizar T4MVC, que creará "constantes" conteniendo las rutas hacia los recursos, de forma que podrás utilizar algo así en las vistas:

    <script src="<%= Links.Scripts.jquery_1_4_1_js %>" type="text/javascript"></script>

    Espero que te sea de ayuda.

    Saludos!


    José M. Aguilar
    Variable not found
  • lunes, 21 de junio de 2010 9:56
     
      Tiene código

    Hola,

    al utilizar Url.Content se produce el siguiente error:

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:

    [HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).]
      System.Web.UI.ControlCollection.AddAt(Int32 index, Control child) +8689774
      Coolite.Ext.Web.ScriptManager.Page_PreRenderComplete(Object sender, EventArgs e) +328
      System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +8872106
      System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2716
    


    Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

    Server Error in '/' Application.

    The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

     

     

  • lunes, 21 de junio de 2010 10:05
     
     

    Buenas,

    ¿Estás utilizando controles de servidor? Ese "Coolite.Ext.Web.ScriptManager" suena regular... Recuerda que en ASP.NET MVC no puedes utilizar controles de este tipo, al no existir el Viewstate, ni los mecanismos de postsback.

    Saludos.

     


    José M. Aguilar
    Variable not found
  • martes, 22 de junio de 2010 8:02
     
      Tiene código

    Hola,

    encontre este workaround, aunque requiere código de servidor...

    <head id="head1" runat="server">
     <title>My Page</title>
     <script type="text/javascript" src="<%# Url.Content("~/javascript/script.js") %>"></script>
    </head>

     

    protected void Page_Load(object sender, EventArgs e)
    {
     Page.Header.DataBind();  
    }

    http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/

    Saludos.

  • martes, 22 de junio de 2010 8:56
     
     Respondida

    Hola,

    si te ciñes a las prácticas habituales (y recomendables) en MVC framework, ese workaround no es en absoluto necesario.

    No sé, me da la impresión de que estáis haciendo un "mix" entre Webforms y MVC, y este es el origen de tu problema y probablemente de otros problemas que os encontraréis en el futuro si no os andáis con mucho cuidado.

    El salto al framework MVC implica al adopción de una nueva filosofía en el desarrollo de aplicaciones, en algunos puntos muy alejada de la propuesta de Webforms. Por ejemplo, si necesitáis Ajax mejor pensar en jQuery, o incluso en librerías específicas para MVC (como la de Telerik), que intentar "encajar" controles diseñados para Webforms.

    Saludos.

     


    José M. Aguilar
    Variable not found
    • Marcado como respuesta Eder CostaOwner viernes, 05 de octubre de 2012 13:54
    •