Экспорт JQGrid в Excel работает локально, но никогда в среде интеграции - PullRequest
0 голосов
/ 22 апреля 2011
<form action="" method="post" id="SaveIndicationsExportForm">
    <table cellspacing="0" cellpadding="0" id="hover" style="float: left;">
        <tbody>
            <tr>
                <td class="hoverButtonLeft off">
                </td>
                <td class="hoverButtonMid off">
                    <div onclick="resultsGridExportToExcel()" buttonize="true" buttonized="true">
                        <img src="/Extranet/img/buttons/excel_icon.gif"> Export To Excel
                    </div>
                </td>
                <td class="hoverButtonRight off">
                </td>
                <td class="hoverButtonSpace off">
                </td>
            </tr>
        </tbody>
    </table>
</form>

Так вот форма, которую я имею на своей странице. По сути, это просто псевдоформа, которую я могу использовать для запуска действия экспорта на странице для элемента JQGrid. Вот метод onClick, к которому привязана форма:

function resultsGridExportToExcel()
{
    var exportUrl = '/extranet/mvc/Indications.cfc/SavedIndicationsExportToExcel?id=3'; 
    var postData = jQuery('#resultsGrid').jqGrid('getGridParam', 'postData'); 
    $.each(postData, function(key, value) 
    { 
        exportUrl += '&'+key+'='+encodeURIComponent(value); 
    }); 
    $('#SaveIndicationsExportForm').attr('action', exportUrl).submit(); 
}

А вот #resultsGrid, который использует функция. Он помещается в верхней части страницы с использованием встроенного кода C # в представлении:

<%
    var grid = Chatham.Web.Models.Indications.SavedIndication.GetGrid("#resultsGrid", Url.Action("SavedIndications", "Indications"), "columnChooser", 500, 800);
%>

И getGrid выглядит так:

public static JqGridDefinition GetGrid(string tableId, string actionUrl, string pageUrl, int height, int width)
{

            var gridDefinition = new JqGrid.JqGridDefinition(
                tableId,
                actionUrl,
                pageUrl);
            gridDefinition.RowList = new List<int>() { 25, 50, 100, 500 };

            gridDefinition.AlwaysShowSortingButtons = true;
            gridDefinition.Grouping = true;
            gridDefinition.GroupingColumn = "CreatedBy";
            gridDefinition.ShowGroupColumn = true;
            gridDefinition.GroupingTitle = string.Format("['<b>{0}0{1}</b>']", "{", "}");
            gridDefinition.SetExportToExcel(
                "SaveIndicationsExportForm",
                System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/SavedIndicationsExportToExcel?id=3"));
            gridDefinition.ShowAdvancedSearch = true;
            gridDefinition.Height = height;
            gridDefinition.Width = width;
            gridDefinition.Multiselect = false;
            gridDefinition.AlwaysShowSortingButtons = true;
            gridDefinition.SearchToolbar = false;
            gridDefinition.NoResultsMessage = "No Saved Indications Found";

            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Nickname", "NickName", true, true, 80, false));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Created By", "CreatedBy", true, true, 80, false, true));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Notional", "Notional", true, true, 80, false, FilterHelper.DateNumberSearchOptions));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Effective Date", "EffectiveDate", true, true, 95, true, true, FilterHelper.DateNumberSearchOptions));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Maturity Date", "MaturityDate", true, true, 95, true, true, FilterHelper.DateNumberSearchOptions));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Term (YR)", "Term", true, true, 50, false, FilterHelper.DateNumberSearchOptions));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Amort. Term Yr", "AmortTermMonths", true, true, 95, true, FilterHelper.DateNumberSearchOptions));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Product", "Product", true, true, 50, false, true));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Rate/Price", "KeyRate", true, true, 95, true, FilterHelper.DateNumberSearchOptions));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("PV01", "PV01", true, true, 95, true, FilterHelper.DateNumberSearchOptions));

            var calculateDate = new JqGrid.JqGridColumnDefinition("Calculate Date", "RateTimeStamp", true, true, 95, false, FilterHelper.DateNumberSearchOptions);
            calculateDate.CustomFormatterDelegate = new CustomFormatter(DateTimeFormatting);
            gridDefinition.AddColumn(calculateDate);

            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Group", "Project", true, true, 95, true, true));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Option Strike", "CapStike", true, true, 95, true));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Trade Type", "Permission", true, true, 95, true));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Profit", "Profit", true, true, 95, false));
            gridDefinition.AddColumn(new JqGrid.JqGridColumnDefinition("Actions", "actions", true, true, 95, false));


            return gridDefinition;
}

Это действительно все, что я получил в данный момент. Если вам нужно увидеть что-то еще, дайте мне знать. Но я могу хорошо экспортировать в локальную среду, а затем, как только я попытаюсь в интеграции, это не сработает, просто выводит меня на пустую страницу, и IE говорит, что у него возникают проблемы с диагностикой проблемы, и приводит меня к общей странице ошибок.

Спасибо, ребята.

1 Ответ

1 голос
/ 23 апреля 2011

Попробуйте получить доступ к URL-адресу /extranet/mvc/Indications.cfc/SavedIndicationsExportToExcel?id=3 в локальной среде на локальном компьютере, а затем посмотрите, что произойдет, затем получите доступ к тому же URL-адресу в интеграции и посмотрите, есть ли у вас тот же результат (вам может потребоваться добавить некоторые параметры в URL-адрес). если это будет работать локально и не будет работать в интеграции, это не ошибка javascript. убедитесь, что интеграция имеет тот же шаблон URL, что, например, может содержать отсутствующую часть /extranet/, или может потребоваться, чтобы некоторые дополнительные параметры, такие как сеанс или ваш экспорт, отличались отсутствием некоторых библиотек (это должно показать ошибку, хотя бы в журналах) .

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

...