2011-09-11 68 views
0

控制器是:剃刀虚拟路径问题

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 [email protected]("../../Home/ShowCaptchaImage") />工作正常。 问题是不是因为剃刀,这是因为在第一实施例I是使用Visual Studio开发服务器和在第二个我使用IIS

+0

使用剃须刀viewengine时,返回的Html是什么样的? –

回答

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

这会导致浏览器从的根请求/Home/ShowCaptchaImage您承载应用程序的HTTP来源(方案+域+端口)。您需要映射URL以反映托管应用程序的所有虚拟文件夹。如果我没有错,这是你面临的问题,看看ResolveUrl/ResolveClientUrl equivalents for Asp.Net Razor?(我没有测试过,但看起来不错)。

另外,您可以使用Firebug或其他浏览器中的等效工具轻松诊断问题 - 查看所做的请求,您将看到浏览器实际请求的内容。