Почему все Razor Views в моем приложении кэшируются? - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть приложение MVC 3, где я использую бритву.У меня есть страница SiteLayout.cshtml, которая является моей главной страницей для сайта.Затем у меня есть страница Login.cshtml, которая использует SiteLayout.cshtml в качестве главной страницы.У меня также есть страница _ViewStart.cshtml, которая применяет главную страницу ко всем страницам cshtml.

Недавно я добавил ссылку «Забыли пароль» на мою страницу входа.Когда я запускаю приложение, оно не показывает новую ссылку.Я очистил решение и перестроил решение, но это не помогло.Это похоже на то, как бритва кешируется.Я проверил все настройки моего браузера (IE, Firefox, Chrome), чтобы убедиться, что они не кэшируются.

Я полностью озадачен этим.Любые идеи ??

Вот код для главной страницы:

@using System.Web.UI.WebControls
@{
    Layout = null;
}
<!DOCTYPE html>
<html lang="en">
<head runat="server">
    <title>Application - @ViewBag.Title</title>
    <script src="/Scripts/jquery-1.7.min.js" type="text/javascript"> </script>
    <script src="/Scripts/jquery.tools.min.js" type="text/javascript"> </script>
    <link rel="stylesheet" type="text/css" media="all" href="/Content/Site.css" />
</head>
<body>
    <!-- Total width: 1180px -->
    <div id="maincontainer">
        <div id="header">
            <span style="text-align:left; float:left;">Header</span>
            <span style="text-align:right; float:right; width:200px;">@Html.Partial("LoginStatus")</span>
        </div>
        <div id="maincontent">
            @RenderBody()
        </div>
    </div>
</body>
</Html>

Код для представления входа в систему:

@{
    ViewBag.Title = "Login";
}
<div style="width:500px;">
@using(Html.BeginForm("Authenticate", "Account", FormMethod.Post))
{
    <fieldset>
        <legend>Login</legend>
        <div class="errorMessage">@Html.ValidationMessage("LoginError")</div>
        <label for="Email">Email</label>
        @Html.TextBox("Email", string.Empty, new { @style = "width:250px;" })
        <label for="Password">Password</label>
        @Html.Password("Password", string.Empty, new { @style = "width:100px;" }) <br/><br />
        <div class="buttons">
            <button type="submit" class="positive" name="login">
                <img src="/Content/images/lock_open.png" alt=""/>
                Login
            </button>
        </div>
        <p>@Html.ActionLink("Forgot Password?", "ForgotPassword", "Account")</p>
    </fieldset>
}
</div>

Наконец, код для _ViewStart:

@{
    Layout = "~/Views/Shared/SiteLayout.cshtml";
}

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Нажмите [control] + F5 для принудительного обновления.

Над каждым методом действия можно установить атрибут кэширования вывода для этой страницы.Вот статья об этом Кэширование вывода

В качестве альтернативы вы можете установить свой веб-сайт настроек кэширования в web.config

0 голосов
/ 07 декабря 2011

Я думаю, я понял это. Я уверен, что это как-то связано с конфигурацией моей машины, поскольку это не происходит с другими. Поэтому вместо того, чтобы позволить VS2010 назначать свой собственный порт, я принудительно выбрал порт. И теперь я получаю новый взгляд.

0 голосов
/ 07 декабря 2011

Помимо очистки и перестройки, о которой вы упомянули, вы, возможно, захотите проверить и убедиться, что у вас не запущены экземпляры вашего сервера .NET Development.

Если вы вообще не хотите, чтобы кэширование происходило, вы можете использовать следующий атрибут, чтобы гарантировать, что ничего не кэшируется:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
//Your Controller Here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...