Проблема перезагрузки скрипта MVC3 Razor даже при малозаметном - PullRequest
0 голосов
/ 28 июля 2011

Даже при использовании ненавязчивой библиотеки ajax скрипты, загруженные на эту страницу из файла _Login.cshtml, загружаются при отправке формы, и я не знаю, как это предотвратить. Еще более странный эффект - когда к любому элементу применяется событие onclick, когда форма отправляется, сценарий выполняется по числу нажатий на элемент.

Редактировать При дальнейшем тестировании я понял, что ненавязчивая библиотека ajax в основном перезагружает всю страницу внутри элемента UpdateTargetId, что ОЧЕНЬ контрпродуктивно. Это означает, что если я отправляю страницу 4 раза, она впоследствии загружается внутри каждого элемента UpdateTargetId на каждой странице внутри страницы. Что я делаю неправильно? Это то, что он должен делать?

    @using MinervaMvc.App_Data
    @model MinervaMvc.Models.LogOnModel
    @{
        ViewBag.Title = "Home Page";
        Layout = "~/Views/Shared/_Login.cshtml";

    }
    <div id="loginContainer">
<h2>
    Login</h2>
<div id="loginForm">
    @{Html.EnableClientValidation();}
    @using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST" }))
      { 
        <table style="margin: 0px auto;">
            <tr>
                <td>
                    @Html.LabelFor(m => m.ServerName, new { @class = "label" })
                </td>
                <td>
                    @Html.TextBoxFor(m => m.ServerName, new { @class = "text" })
                </td>
            </tr>
            <tr>
                <td align='right'>
                    @Html.LabelFor(m => m.UserName, new { @class = "label" })
                </td>
                <td>
                    @Html.TextBoxFor(m => m.UserName, new { @class = "text" })
                </td>
            </tr>
            <tr>
                <td align='right'>
                    @Html.LabelFor(m => m.Password, new { @class = "label" })
                </td>
                <td>
                    @Html.PasswordFor(m => m.Password, new { @class = "text" })
                </td>
            </tr>
            <tr>
                <td align="right" colspan="2">
                    <div id='errorShade' class='shade'>
                        <div id='errorBox'>Password or Username is incorrect. Please try again.</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td align="right" colspan="2">
                    <div id='loginShade' class='shade'>
                        <input type='submit' class='button' id='btn' value='Login' /></div>
                </td>
            </tr>
        </table>
           <div id='ajaxUpdate' style='position: absolute; visibility: hidden;'>
                @{if (ViewBag.Failed != null && ViewBag.Failed)
                {
                    <script type="text/javascript">
                    pulseState.stopPluse = true;
                    hideShowLogin(true, 'errorShade', 20);
                    hideShowLogin(false, 'loginShade', 33);
                    </script>
                }}
            </div>
      }
</div>
    </div>
    <br />
    <div id="copywrite">
        @{ Html.RenderPartial("Copyright"); }
    </div>

1 Ответ

0 голосов
/ 29 июля 2011

Перво-наперво, вам не нужна следующая строка:

@{Html.EnableClientValidation();}

Просто включите проверку клиента в вашем файле web.config (должно быть по умолчанию):

<appSettings>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    <add key="ClientValidationEnabled" value="true"/>
</appSettings>

Тогдаубедитесь, что вы включили на свою страницу следующий скрипт:

  • jquery-1.5.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js
  • jquery.unobtrusive-ajax.js (это работает для всех Ajax.* помощников, не имеет ничего общего с проверкой)

Что касаетсяЭто касается перезагрузки всей страницы: когда вы задаете элемент UpdateTargetId в параметрах AJAX, этот элемент обновляется с помощью результатов запроса AJAX, возвращаемого сервером (часто частичного).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...