Pregunta

Encontré un problema cuando estaba probando mi ayudante HTML. Básicamente, estoy creando una cuadrícula con cargas de filas, columnas y diferentes tipos de datos. En el encabezado también hay una imagen para notificar al usuario por qué columna están ordenados los datos. Sin embargo, cuando escribo mi prueba ahora (demasiado tarde, pero ¿más tarde que nunca, ¿verdad?), Recibo este error:

"La aplicación Virtual Rath '~/Images/SortingRowup.png' no se puede hacer absoluta, porque la ruta a la aplicación no se conoce".

 var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png");

Como puedo resolver esto. Puedo entender cómo esto podría ser un problema durante la prueba, y la imagen podría no estar disponible y todo eso, pero ¿cuál es la forma correcta de hacer esto entonces?

¿Fue útil?

Solución

La forma correcta es llamar UrlHelper.GenerateContentUrl en vez de VirtualPathUtility. En su código de ayuda, haría algo como esto:

MvcHtmlString MyHelper(this HtmlHelper helper, ...) {
  // other code
  var imgPath = UrlHelper.GenerateContentUrl("~/Images/SortingArrowUp.png",
                                             helper.ViewContext.HttpContext);
  // other code
}

Cuando pruebe unidades, tendrá que pasar en objetos de contexto correctamente burlados. Necesitas burlarse HttpContext.Request.ApplicationPath - Devuelve una ruta de aplicación ficticia, HttpContext.Response.ApplyAppPathModifier() - hacer nada, HttpContext.Request.ServerVariables - Return Null, HttpContext.Request.Path y HttpContext.Request.RawUrl - Devuelva algún valor que tenga sentido.

Otros consejos

Puedes usar esta sobrecarga:

var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png", 
    context.Request.ApplicationPath);

Esto es lo que UrlHelper.GenerateContentUrl usa internamente, y solo necesitas burlarse ApplicationPath.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top