MVC 3 Ajax.ActionLink не работает - PullRequest
5 голосов
/ 20 мая 2011

Я играю с каким-то магазином на основе примера MvcMusicStore и у меня возникают проблемы с помощниками MVC3 Ajax.ActionLink / Ajax.RouteLink. Проблема в том, что он просто не генерирует Ajax-запрос (Request.IsAjaxRequest () == false). Формы, которые я генерирую, используя Ajax.BeginForm / Ajax.BeginRouteForm, работают хорошо.

Config:

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

Сценарии

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

Ссылка:

@Ajax.ActionLink("show cart", "Show", "Cart", new AjaxOptions() { OnSuccess = "handleSuccess", HttpMethod = "Get", OnFailure = "handleFailure" })

Создать HTML:

<a data-ajax="true" data-ajax-failure="handleFailure" data-ajax-method="Get" data-ajax-success="handleSuccess" href="/Cart/Show">show cart</a>

Как уже говорилось, это прекрасно работает:

@using (Ajax.BeginForm(
        "Show",
        new { controller = "Cart" },
        new AjaxOptions
        {
            OnSuccess = "handleSuccess",
            OnFailure = "handleFailure"
        }))
    {
        <input type="submit" class="button" />
    }

Действие выглядит так:

[Authorize]     
public ActionResult Show()
{
    if (Request.IsAjaxRequest())
    {
        ViewBag.CartItems = ShoppingCart.GetCart(this)
            .Items;

        return Json(new AjaxResultViewModel()
        {
            Content = RenderPartialViewToString(),
            UpdateTargetSelector = "#dialog",
            InsertionMode = InsertionMode.InsertBefore
        }, JsonRequestBehavior.AllowGet);
    }

    ViewBag.Exception = new NotSupportedException();
    return View("Error");
}

Я уже некоторое время искал и не мог найти причину такого поведения, может быть, кто-то может мне помочь?

С наилучшими пожеланиями!

Ответы [ 3 ]

10 голосов
/ 15 ноября 2012

В новом шаблоне MVC4 на _layout.cshtml рядом с дном есть @Scripts.Render("~/bundles/jquery").

Я должен был включить @Scripts.Render("~/bundles/jqueryval"), который является библиотекой Ajax

ЭтоУстранена проблема с полной обратной передачей с использованием страницы индекса.Код ссылки моей акции:

<div id="timeDisplay">
@Ajax.ActionLink("Click to display server time", "Time", new AjaxOptions { HttpMethod="GET",UpdateTargetId="timeDisplay"});
</div>
2 голосов
/ 21 февраля 2012

Я заставил это работать, объявив следующие сценарии в этом точном порядке:

@section script
{
  <script src="@Url.Content("~/Scripts/MicrosoftAjax.debug.js")" type="text/javascript"></script>
  <script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js")" type="text/javascript"></script>
  <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript">   </script>
}

Ради полноты, в моем файле * _Layout.cshtml * я объявил следующее:

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

@RenderSection("script", required:false)

<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
1 голос
/ 21 мая 2011

Может быть [ этот пост ] имеет ответ.

Вкратце: функции js " handleSuccess " и " handleFailure " доступны по форме?

Lg warappa

...