Индекс ViewResult не повторный рендеринг после обратного вызова от вызова AJAX - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь выполнить обратный вызов в моем действии контроллера ViewResult Index () из вызова ajax, чтобы обновить содержимое страницы на основе выпадающего списка, но мое представление не обновляется (повторный рендеринг).

Я установил точки останова, и действие index () в контроллере выполняется так, как оно вызывается из ajax 'get', и модель передается в представление (точки прерывания также попадают в представление).

Вид:

  @* Contains code to build a webgrid and display data based on the model passed in... *@
  @* Contains a couple of dropdowns for filtering *@
  @* 
     Catch the select event from a dropdown and call back into the view to re-update page contents
     for filter requests.
  *@
    <script type="text/javascript">
        $("select").multiselect({
            click: function (event, ui) {
               $.ajax(
               {   type: "GET",
                   url: '@Url.Action("Index","Data")',
                   data: { FilterRequest: (ui.checked ? 'checked' : 'unchecked') },
                   success: function () {
                   alert('hello again');
               }
             })
            }
        });
</script>

Контроллер:

// GET: /Data/
public ViewResult Index(string FilterRequest)
{
    IList<DataModel> dataResult;
    if (FilterRequest == null)
    {   // Not a filter request so just update grid with full contents
        dataResult = db.DataObjs.OrderByDescending(x => x.id).ToList();
    }
    else
    {   // Filter request so update grid with filtered data
        dataResult = db.DataObjs.Where(/*Build some filtered stuff here*/).OrderByDescending(x => x.id).ToList();
    }            

    // Build some sub totals based on the resultset from above result set to display
    // Other business logic number mashing here to display in other grids on the same view

    return View(dataResult);
 }

1 Ответ

1 голос
/ 05 декабря 2011

Вы ничего не делаете с ответом на звонок $.ajax.

Примерно так:

$.ajax(
{   
   type: 'GET',
   url: '@Url.Action("Index","Data")',
   data: { FilterRequest: (ui.checked ? 'checked' : 'unchecked') },
   dataType: 'html',
   success: function (html) {
      $('#somecontainer').html(html);
   } 
});

Кроме того, вы не можете вернуть полный просмотр (например,HTML-страницу) из вашего метода действия - вам нужно либо вернуть PartialView, либо JsonResult, который вы можете повторить и вручную связать содержимое.

Для частичного просмотра вам нужно что-то вродеэто:

return PartialView(dataResult);

Все зависит от того, что вы пытаетесь сделать заново.Если HTML-код, который требуется для повторного рендеринга, является сложным, используйте частичное представление.Если это просто набор данных, который нужно вставить в элемент ввода (например, в раскрывающийся список), вам следует сохранить полезную нагрузку HTTP по сети и использовать JsonResult.

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