Ajax.BeginForm приводит к перенаправлению на частичное представление вместо на месте - PullRequest
2 голосов
/ 04 октября 2011

Мой Search.cshtml имеет div с именем "search-results", который должен быть обновлен. SearchResults - это имя действия. Я делал это много раз в проектах MVC2 / VS2008, но это мой первый опыт использования MVC3 и VS2010.

Проблема в том, что вместо того, чтобы мой результат поиска отображался в моем элементе div, при нажатии на кнопку «Отправить» перенаправляется мое частичное отображение в виде отдельной страницы.

Я читал, что это может быть потому, что Ajax не включен. Мой _Layout.cshtml выглядит так:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <script src="@Url.Content("~/Scripts/2011.2.712/jquery-1.5.1.min.js")"  type="text/javascript"></script>
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.core.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.datepicker.css")" rel="stylesheet"  type="text/css" />
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.theme.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/main.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/2011.2.712/jquery-1.5.1.min.js")" type="text/javascript"></script>
    @(Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("telerik.common.css").Add("telerik.transparent.css").Combined(true).Compress(true))) 
</head>
<body>
    <div class="page">
        <div id="header">
            <div id="title">
                <h1>My MVC Application</h1>
            </div>

            @(Html.Telerik().Menu()
                    .Name("menu")
                    .Items(menu => {
                        menu.Add().Text("Home").Action("Index", "Home");
                        menu.Add().Text("About").Action("About", "Home");
                        menu.Add().Text("Employees").Action("List", "Employee");
                    }))
        </div>

        <div id="main">
            @RenderBody()
            <div id="footer">
            </div>
        </div>
    </div>
    @(Html.Telerik().ScriptRegistrar().DefaultGroup(group => group.Combined(true).Compress(true)))</body>
</html>

Нужно ли добавлять MicrosoftMvcAjax.js или jquery.unobtrusive-ajax.js в? Мой web.config (root) содержит следующее:

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

Если я добавляю MicrosoftMvcAjax.js в конце элемента, я получаю сообщение о том, что пространство имен «Тип» является неопределенной ошибкой из первой строки MicrosoftMvcAjax.js:

    Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_AjaxOptions=function(){return {};}

Что мне здесь не хватает. Я уверен, что мой код в порядке, поскольку он почти полностью скопировал мои проекты MVC2.

Ответы [ 2 ]

5 голосов
/ 04 октября 2011

Вы забыли включить скрипт jquery.unobtrusive-ajax.js на свою страницу (при необходимости измените путь):

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

Что касается скриптов Microsoft*.js, то они устарели в ASP.NET MVC3 и больше не должны использоваться, если вы не портируете какое-либо устаревшее приложение.Они были заменены на jQuery.

0 голосов
/ 15 октября 2011

Хорошо, разобрался с моей проблемой.

Я вызывал Ajax.BeginForm с точкой AjaxOption OnSuccess для функции js, которая обновила мой заполнитель.Но это не нужно, причем ненавязчиво.Как только я удалил OnSucces из настроек Ajax, все начало работать.

~ S

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