Pregunta

El controlador es:

public class HomeController : Controller
{
    public ActionResult LogOn()
    {
        return View();
    }

    [HttpPost]
    public ActionResult LogOn(string captcha)
    {
        if (captcha == HttpContext.Session["captcha"].ToString())
            return Content("ok");
        else
            return Content("failed");
    }

    public CaptchaImageResult ShowCaptchaImage()
    {
        return new CaptchaImageResult();
    }
 }

La vista es:

<%using (Html.BeginForm())
{ %>
   <p><img src="/Home/ShowCaptchaImage" /></p>
   <p>Please enter the string as shown above:</p>
   <p><%= Html.TextBox("captcha")%></p>
   <p><input type="submit" value="Submit" /></p>
<% } %>

Todo va bien, la imagen Captcha se representa (Captchaimageresult escribe un JPG en el flujo de respuesta). Pero si uso el motor de vista de afeitar, no hay una imagen Captcha representada.

¿Como arreglarlo?

Y una cosa más: ¿es una buena manera de mostrar Captcha?

Luego editar: <img src=@Href("../../Home/ShowCaptchaImage") /> funciona bien. El problema no se debió a que Razor fue porque en el primer ejemplo estaba usando Visual Studio Development Server y en el segundo estaba usando IIS

¿Fue útil?

Solución

<img src="/Home/ShowCaptchaImage" />

Esto hace que el navegador solicite /Home/ShowCaptchaImage Desde la raíz del origen HTTP (esquema+dominio+puerto) en el que aloja la aplicación. Debe mapear la URL para reflejar cosas como cualquier carpeta virtual en las que se aloja la aplicación. Si no me equivoco y este es el problema que enfrenta, eche un vistazo a ¿ResolveUrl/resolVeClientUrl equivalentes para afeitar ASP.NET? (No lo he probado, pero se ve bien).

Además, puede diagnosticar el problema fácilmente usando Firebug o una herramienta equivalente en otro navegador: eche un vistazo a las solicitudes que se realizan y verá lo que el navegador realmente solicita.

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