2014-01-14 2 views
1

Провел возрасте, пытаясь исправить это и получить никуда. В основном, когда нажата ссылка на действие, я хочу, чтобы div обновлялся со значениями, которые появляются на новой странице, но не могут решить проблему. Вот мой код:Почему мой рендеринг частичного представления ajax на новой странице?

@*@model PagedList.IPagedList<S00117372CA3.Product>*@ 
@*@model Tuple<PagedList.IPagedList<S00117372CA3.Product>, IEnumerable<S00117372CA3.Order>>*@ 
@model S00117372CA3.Controllers.ProductViewModel 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table class="searchResult"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().ProductName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().Supplier.CompanyName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().Category.CategoryName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().QuantityPerUnit) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().UnitPrice) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().UnitsInStock) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().UnitsOnOrder) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().ReorderLevel) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Products.First().Discontinued) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model.Products) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ProductName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Supplier.CompanyName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Category.CategoryName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.QuantityPerUnit) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.UnitPrice) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.UnitsInStock) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.UnitsOnOrder) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ReorderLevel) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Discontinued) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.ProductID }) | 
      @Ajax.ActionLink("Details", "Details", new { id=item.ProductID }, new AjaxOptions { UpdateTargetId = "searchResult", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.ProductID }) 
     </td> 
    </tr> 
} 

</table> 

<div> 
    Page @(Model.Products.PageCount < Model.Products.PageNumber ? 0 : Model.Products.PageNumber) of @Model.Products.PageCount 
    @if (Model.Products.HasPreviousPage) 
    { 
     @Html.ActionLink("<<", "Index", new { page = 1}) 
     @Html.Raw(" "); 
     @Html.ActionLink("< Prev", "Index", new {page = Model.Products.PageNumber - 1}) 
    } 
    else{ 
    @:<< 
    @Html.Raw(" "); 
     @:< Prev 
    } 

    @if (Model.Products.HasNextPage) 
    { 
     @Html.ActionLink("Next >", "Index", new {page = Model.Products.PageNumber + 1}) 
     @Html.Raw(" "); 
     @Html.ActionLink(">>", "Index", new {page = Model.Products.PageCount}) 
    } 
    else{ 
    @:Next > 
    @Html.Raw(" ") 
@:>> 
    } 
</div> 

<div id="searchResult"> 

</div> 

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

ответ

1

Где-то в вашей структуре папок .. есть файл под названием _ViewStart.cshtml. Этот файл обеспечивает первоначальную настройку ваших просмотров в данной области.

Этот файл, вероятно, имеет:

@{ 
    Layout = "path/to/layout/here.cshtml"; 
} 

В этом случае .. все виды вы рендер с return View() будет использовать это.

У вас есть два варианта .. либо:

)

return PartialView(); 

.. из метода действий. Или ..

б) В вашем частичном виде:

@{ 
    Layout = null; 
} 

Я принял догадку на вашей проблеме .. Ваш вопрос не очень легко понять.

+0

My Action Method заканчивается следующим образом: return PartialView («_ Orders», model); поэтому я предполагаю, что вы имеете в виду отчасти –

+0

Затем попробуйте вариант b. Это один из них :) –

+0

Пробовал вариант b там тоже. Все еще открывается новая страница. Это действительно заставляет мою голову болеть:/Любые другие идеи? –

0

Чтобы решить эту проблему, вам нужно только установить jquery.unobtrusive-ajax через NuGet и добавить ссылку в поле зрения, как это:

(Или вы можете сделать так узелок)

Это необходимо потому, что microsoft не добавляло это по умолчанию в MVC 5.

Смежные вопросы