2011-09-11 107 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或其他瀏覽器中的等效工具輕鬆診斷問題 - 查看所做的請求,您將看到瀏覽器實際請求的內容。