Ajax.ActionLink с PartialView открывает новую страницу MVC4

Я создаю веб-приложение ASP.NET MVC4(.5). Я прошел много тем о проблеме, попробовал каждую из них, но проблема не исчезла.

У меня есть контроллер, который возвращает PartialView.

[HttpGet]
public ActionResult Subcategories(int id)
{
  IOrderedQueryable<Subcategory> subcategories = this.Data.Subcategories
                                                   .All()
                                                   .Where(sub => sub.Category.Id == id)
                                                   .OrderBy(cat => cat.Name);

  var request = this.Request.IsAjaxRequest();
  IEnumerable<ConciseSubcategoryViewModel> model = Mapper.Map<IEnumerable<ConciseSubcategoryViewModel>>(subcategories);
  return this.PartialView("_Subcategories", model);
}

У меня есть этот комплект, включенный в нижней части моей страницы _Layout.

bundles.Add(new ScriptBundle("~/Content/jquery").Include(
              "~/Scripts/jquery-1.10.2.js",
              "~/Scripts/jquery.validate.js",
              "~/Scripts/jquery.unobtrusive-ajax.js",
              "~/Scripts/jquery.validate.unobtrusive.js"));

Но когда я создаю Ajax.ActionLink в одном из моих представлений и вызываю его, переменная "request" в контроллере имеет значение "false", причина запроса - DOCUMENT вместо XHR и возвращает частичное представление в новой вкладке браузер.

@Ajax.ActionLink(
  Model.Name,
  "Subcategories",
  "Items",
  new { Id = Model.Id },
  new AjaxOptions() {
    HttpMethod = "GET",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "subcategories-wrapper"
})

Спасибо за помощь. Я просто не вижу ничего плохого.

1 ответ

Ребята, я не думаю, что проблема здесь, но посмотрите, что произойдет, когда я вернусь к представлению, которое создает ajax:

@model AddItemViewModelBag
@section styles {
  <link href="~/Stylesheets/add-item.css" rel="stylesheet" />
}
@{
  ViewBag.Title = "Ново изделие";
}


@Html.Partial("_AddItemForm", Model.AddItemBindingModel)

@Html.Partial("_Categories", Model.Categories)

@section scripts{
  <script src="~/Scripts/add-item.js"></script>
}

в _Categories Посмотреть:

@model IEnumerable<ConciseCategoryViewModel>

<div class="category-manager hidden-manager">  
  <div class="categories-container">
    <div class="heading">Изберете категория</div>
    <div id="categories-wrapper">
      @Html.DisplayForModel()
    </div>
  </div>
  <div class="subcategories-container">
    <div id="subcategories-wrapper">
    </div>
  </div>
</div>

И ConciseCategoryViewModel

@model ConciseCategoryViewModel

<div class="category-option" data-category-id="@Model.Id">
  @Ajax.ActionLink(
    Model.Name,
    "Subcategories",
    "Items",
    new { Id = Model.Id },
    new AjaxOptions() {
       HttpMethod = "GET",
       InsertionMode = InsertionMode.Replace,
       UpdateTargetId = "subcategories-wrapper"
    })
 </div>

Я думаю, что он все еще может использовать ненавязчивый, включенный в страницу _Layout...

Другие вопросы по тегам