控制器是:
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();
}
}
观点是:
<%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>
<% } %>
一切顺利,渲染验证码图像(CaptchaImageResult在响应流中写入jpg)。但是,如果我使用剃刀视图引擎,则不会呈现验证码图像。
如何解决?
还有一件事:它是显示验证码的好方法吗?
稍后修改:<img src=@Href("../../Home/ShowCaptchaImage") />
工作正常。
问题不是因为剃刀是因为在第一个例子中我使用的是Visual Studio开发服务器而在第二个例子中我使用的是IIS
答案 0 :(得分:0)
<img src="/Home/ShowCaptchaImage" />
这会导致浏览器从您托管应用程序的HTTP源(方案+域+端口)的根目录请求/Home/ShowCaptchaImage
。您需要映射URL以反映托管应用程序的任何虚拟文件夹。如果我没错,这就是你所面临的问题,请看看ResolveUrl/ResolveClientUrl equivalents for Asp.Net Razor?(我没有测试过,但看起来不错)。
此外,您可以使用Firebug或其他浏览器中的等效工具轻松诊断问题 - 查看所做的请求,您将看到浏览器实际请求的内容。