2014-02-20 4 views
2

В свете у меня Ajax форма, как показано ниже:Ajax.BeginForm выполняет полную обратную передачу вместо частичной

@using (Ajax.BeginForm("ShowPartial", new AjaxOptions() 
{ 
    InsertionMode=InsertionMode.Replace, 
    UpdateTargetId="dane" 
})) 
{ 
    // My menu here 
} 
@Html.Partial("ShowPartial") 

ShowPartial связан с этим методом контроллера:

public ActionResult ShowPartial(string DeviceName, string submit, int? Page) 
    { 
     List<Expression<Func<DeviceInstance, bool>>> where = new List<Expression<Func<DeviceInstance, bool>>>(); 
     int PageNo = 1; 
     if (Page.HasValue) 
     { 
      PageNo = Page.Value; 
     } 
     if (DeviceName != "" && DeviceName != null) 
     { 
      where.Add(w => w.Device.Name.Contains(DeviceName)); 
     } 
     return PartialView(unitOfWork.deviceInstanceRepository.Get(where, q => q.OrderBy(o => o.Id), PageNo, w => w.Device, w => w.DeviceUsage)); 
    } 

И PartialView:

@model IEnumerable<magazyn.Models.DeviceInstance> 
<table class="table table-striped" id="dane"> 
    <tr> 
     //table headers 
    </tr> 

    @foreach (var item in Model) 
    { 
     // rendering table contet 
    } 

</table> 

Может ли кто-нибудь сказать мне, почему код выше делает полную обратную передачу вместо частичного.

ответ

5

Проверить этот рабочий раствор -

Пусть ваш главный Регулятор будет, как показано ниже -

public ActionResult Ajax() 
    { 
     return View(); 
    } 

И он вернется следующий вид. Я установил Unobstructive Ajax nuget и ссылался на его сценарий js, как показано ниже.

@{ 
    ViewBag.Title = "Ajax"; 
} 

<h2>Ajax</h2> 
<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

@using (Ajax.BeginForm("ShowPartial", new AjaxOptions() 
{ 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "dane" 
})) 
{ 
    <input type="submit" value="click"/> 
} 

<div id="dane"> 
    @Html.Action("ShowPartial") 
</div> 

Тогда у меня есть еще одно действие контроллера, которое получит удар при выполнении этого запроса ajax. Это действие контроллера будет вернуть частичный вид -

public ActionResult ShowPartial() 
    { 
     return PartialView("MyPartial"); 
    } 

И частичный вид выглядит следующим образом -

<div> 
    @DateTime.Now 
</div> 

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

enter image description here

+0

Спасибо. Проблема была в ненавязчивом ajax, как я писал в своем собственном ответе. Но я соглашусь с тобой :) – szpic

9

Я не знал, что помощники ajax от Microsoft зависят от Jquery + Microsoft jquery plugin. Поняв, что я нашел необходимый плагин и загрузил его с помощью диспетчера пакетов.

PM> Install-Package Microsoft.jQuery.Unobtrusive.Ajax 
Смежные вопросы