ASP.NET MVC 3.0 WebGrid - Ajax включен - PullRequest
       8

ASP.NET MVC 3.0 WebGrid - Ajax включен

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

Я столкнулся со следующей проблемой: «Ссылка на скрипт JQuery необходима для включения поддержки Ajax в помощнике« WebGrid »»

Я хочу включить свой WebGrid AJAX. Я получил этот код для частичного просмотра

@ModelType WebGrid

@Model.GetHtml(tableStyle:="webgrid", headerStyle:="webgrid-header", footerStyle:="webgrid-footer", alternatingRowStyle:="webgrid-alternating-row", selectedRowStyle:="webgrid-selected-row", rowStyle:="webgrid-row-style",
                       columns:=Model.Columns(Model.Column(
                                             columnName:=GemeentePostColumnsEnum.NISCode.ToString()),
                                Model.Column(columnName:=GemeentePostColumnsEnum.GemeenteNaam.ToString()),
                                Model.Column(columnName:=GemeentePostColumnsEnum.DistrictNaam.ToString()),
                                Model.Column(columnName:=GemeentePostColumnsEnum.PostCode.ToString()),
                                Model.Column(columnName:=GemeentePostColumnsEnum.PostNaam.ToString()),
                                Model.Column(
                                    format:=@@<text>@Ajax.ActionLink("Edit", "AddEdit", New With {.NISCode = item.NISCode}, New AjaxOptions With {.UpdateTargetId = "formGemeentePost", .InsertionMode = InsertionMode.Replace, .HttpMethod = "GET", .OnFailure = "failure"})</text>)))

И этот код для контроллера:

Function SearchForm(searchModel As GemeentePostWebService.GemeentePostCriteria) As PartialViewResult
            searchModel.Taalcode = "nl"


           'Code to fill up Model

                ViewBag.WebGrid = CreateGrid(viewModelList)
                Return PartialView("Partial/_Grid", ViewBag.WebGrid)
            End If
        End Function

        Private Function CreateGrid(source As List(Of GemeentePostModel)) As WebGrid
            Return New WebGrid(source:=source, rowsPerPage:=10, ajaxUpdateContainerId:="grid", defaultSort:=GemeentePostColumnsEnum.GemeenteNaam)
        End Function

Когда я ввожу некоторые поисковые значения и отправляю форму, я получаю следующую ошибку:

"Ссылка на скрипт JQuery необходима для включения поддержки Ajax в помощнике" WebGrid ""

С результатом: я получил правильные отфильтрованные значения, но мой div (updatetargetid) не заполнен.

Я уже добавил jQuery и ненавязчивые скрипты и включил их в свой заголовок:

<!DOCTYPE html>
<html>
<head>
    <title>X</title>
    <link href="/X/Content/Site.css" rel="stylesheet" type="text/css" />
    <link href="/X/Content/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" />
    <script src="/X/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="/X/Scripts/jquery-ui-1.8.11.js" type="text/javascript"></script>
    <script src="/X/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
</head>

Ответы [ 3 ]

1 голос
/ 20 января 2012

Проблема, с которой вы можете столкнуться, - это ссылка на файл "jquery.unobtrusive-ajax.min.js" на вашей странице.

Если вы используете YSlow или PageSpeed, одно из предложений заключается в том, что css помещается в голову, а javascript - внизу.

Это приводит к тому, что вы видите (просто если бы это случилось и со мной).

Если ваша ссылка находится внизу, при первой загрузке страницы (или обновлении) файл javascipt еще не загружен, прежде чем помощник WebGrid попытается начать делать это, и вы получите всплывающее сообщение о пропавшей ссылке. Если вы отклоните его, тогда пейджинг или сортировка действительно будут работать, и сообщение исчезнет ... пока вы не обновите страницу снова.

Вы можете переместить ссылку на скрипт в начало или написать скрипт document.ready, чтобы отложить обработку.

0 голосов
/ 23 декабря 2011

Должен

Return New WebGrid(source:=source,.....

прочитать

Return New WebGrid(source: source,.....

т.е. бросить "="? (Извините, я давно не пользовался VB)

Кроме того, вы видите имя действия контроллера и параметры для частичного просмотра в URL-адресе? Это может быть связано с тем, как вы отправляете форму обратно на сервер. У меня была такая же ошибка, когда я пытался публиковать данные формы программно, используя JavaScript, а не пользователя, нажимающего кнопку отправки. Мне нужно, чтобы моя сетка заполнялась соответственно обновлению страницы, выбору меню и событиям выпадающего списка, и мне было трудно заставить ее работать. Когда я получил ошибку, я получил свою частичную страницу с заполненной сеткой, но не остальную часть страницы.

Хотя я так и не решил проблему, мне все-таки удалось обойти ее. Мое решение включало это:

Редактировать вид для этого

@model MyProject.Models.GridResultsModel
 ...

<div id="updatetarget">
    @Html.Partial("_GridResults", Model)
</div>

<script type="text/javascript">
    $(document).ready(function () {
        $('#updatetarget').load("_GridResults")        
    });
</script>

мое вдохновение пришло из этого поста: Выбор нескольких флажков с использованием веб-сетки в MVC 3 (выбрать все / отменить все), сортировка и разбиение по страницам

надеюсь, это поможет

0 голосов
/ 21 декабря 2011

Где вы добавили свою ссылку на jquery, потому что если она разбивается на if (typeof(jQuery)=='undefined'), то совершенно определенно не будет найдено jquery в этой части страницы.

Вы посмотрели на исходной стороне клиента, чтобы убедиться, что ссылка jquery существует и что сценарий / javascript веб-сетки используется / ссылается после ссылки на библиотеку jquery.

...