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を書き込みます)。しかし、レイザービューエンジンを使用すると、キャプチャ画像がレンダリングされません。

それを修正する方法は?

そしてもう1つ:キャプチャを表示するのに良い方法ですか?

後で編集:<img src=@Href("../../Home/ShowCaptchaImage") />正常に動作します。問題は、最初の例ではVisual Studio Developmentサーバーを使用し、2番目の例ではIISを使用していたためでした。

4

1 に答える 1

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

これにより、ブラウザは/Home/ShowCaptchaImage、アプリケーションをホストしているHTTPオリジンのルート(スキーム+ドメイン+ポート)から要求します。アプリがホストされている仮想フォルダーなどを反映するようにURLをマップする必要があります。私が間違っておらず、これがあなたが直面している問題である場合は、Asp.NetRazorに相当するResolveUrl/ResolveClientUrlを見てください。(私はそれをテストしていませんが、それはよさそうです)。

また、Firebugまたは別のブラウザの同等のツールを使用して問題を簡単に診断できます。行われたリクエストを確認すると、ブラウザが実際に何をリクエストしているかがわかります。

于 2011-09-11T19:00:34.233 に答える