razor - sintaxis - ¿Por qué Html.Raw se está perdiendo en la etiqueta de ancla en ASP.NET MVC 4?
razor c# (5)
¿Por qué no usas jquery para publicar la url?
$(function () {
$(''form'').submit(function () {
$.ajax({
url: this.action,
type: this.method,
data: { a:''firstvalue'', b: ''secondvalue''},
success: function (result) {
//code for successful result
}
});
return false;
});
});
en el controlador
public ActionResult Fetch(string a, string b)
{
//write required codes here
return View();
}
Tengo una URL que me gustaría mostrar en una etiqueta de anclaje tal como está en una vista de Razor. Pensé que Html.Raw sería el camino a seguir:
@{
string test = "http://someurl.com/someimage.png?a=1234&b=5678";
}
<div>
<a href="@Html.Raw(test)">Test</a>
</div>
Pero esto no funciona. El signo se codifica y el HTML se representa como:
<div>
<a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a>
</div>
Lo extraño es que si hago la llamada Html.Raw fuera de la etiqueta delimitadora, la salida HTML es la esperada:
<div>
@Html.Raw(test)
<div>
se representa como
<div>
http://someurl.com/someimage.png?a=1234&b=5678
</div>
¿Alguien puede explicar por qué esto es?
Editar:
Probé algunas otras cosas y descubrí que lo siguiente funciona como se esperaba:
<div data-url="@Html.Raw(test)"></div>
salidas:
<div data-url="http://someurl.com/someimage.png?a=1234&b=5678"></div>
Para agregar un poco más de contexto, mi objetivo no es usar la URL en una etiqueta de anclaje , ya que href
s puede estar codificado en HTML y aún funciona (solo utilicé el caso de la etiqueta de anclaje como ejemplo). En su lugar, deseo usar la URL en una etiqueta de valor <object> <param>
para un objeto Flash. El objeto Flash no reconoce correctamente la URL codificada en HTML, pero no puedo hacer que la URL en bruto se imprima correctamente.
Estoy en una pérdida. Es hora de romper el código fuente de MVC, supongo ...
Esto está sucediendo porque algo en la tubería (el atributo supongo, pero tendría que buscarlo) codifica todos los ... valores de atributo. Sin embargo, esto no debería afectar al navegador para que no alcance la ubicación deseada.
Puede probar esto con la sobrecarga @Html.ActionLink(text, action, routeAttributes)
.
@Html.ActionLink("Test", "Index", new { tony = "1", raul = 2 })
salidas
<a href="/?tony=1&raul=2">Test</a>
En lo que respecta a su edición, solo necesita hacer que <param>
parte completa de su valor en bruto.
@{
var test = "<param src=/"http://someurl.com/someimage.png?a=1234&b=5678/">";
}
<div>
<object>
@Html.Raw(test)
</object>
</div>
Me gusta esto:
@{
string test = "http://someurl.com/someimage.png?a=1234&b=5678";
}
<div>
<a href="@Html.Raw(Html.AttributeEncode(test))">Test</a>
</div>
produce un marcado válido:
<div>
<a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a>
</div>
Pero esto no funciona. El signo se codifica y el HTML se representa como:
Pero así es exactamente como debe ser un marcado válido. El símbolo comercial debe estar codificado cuando se utiliza como un atributo. No te preocupes, el navegador entenderá perfectamente esta URL.
Tenga en cuenta que el siguiente es un marcado no válido, por lo que no desea esto:
<div>
<a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a>
</div>
Tratar
<div>
<a href="@MvcHtmlString.Create(test)">Test</a>
</div>
sólo intente a continuación ... Funciona perfecto.
@{
string test = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token="[email protected];
}
<div>
<a href="@Html.Raw(System.Web.HttpUtility.HtmlDecode(test))">@Html.Raw(System.Web.HttpUtility.HtmlDecode(test))</a>
</div>