Проблема с Razor Virtual Path - PullRequest
       22

Проблема с Razor Virtual Path

0 голосов
/ 11 сентября 2011

Контроллер:

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

1 Ответ

0 голосов
/ 11 сентября 2011
<img src="/Home/ShowCaptchaImage" />

Это заставляет браузер запрашивать /Home/ShowCaptchaImage из корня источника HTTP (схема + домен + порт), на котором вы размещаете приложение.Вам необходимо сопоставить URL-адрес, чтобы отразить такие вещи, как любые виртуальные папки, в которых размещено приложение.Если я не ошибаюсь, и с этой проблемой вы сталкиваетесь, посмотрите на ResolveUrl / ResolveClientUrl эквиваленты для Asp.Net Razor? (я не проверял это, но выглядит хорошо).

Кроме того, вы можете легко диагностировать проблему, используя Firebug или аналогичный инструмент в другом браузере - посмотрите на сделанные запросы, и вы увидите, что на самом деле запрашивает браузер.

...