Как правильно использовать jQuery.get () в проекте Razor / CSHTML?

0

Краткая информация:

Я пытаюсь загрузить XML файл "Barcode.label" с помощью функции jQuery.get(). Однако jQuery.get() не может найти файл. Я считаю, что проблема может быть связана с работой в MVC5 и попыткой найти файл, используя неправильные соглашения для путей. Как получить правильный путь к файлу в MVC5 Razor/CSHTML Web Project?

Если вам нужна дополнительная информация по этой конкретной проблеме, я разместил ее ниже. Это мой первый вопрос, задающий здесь вопрос, поэтому я заранее извиняюсь за любую двусмысленность.


Предисловие:

Я работаю над веб-проектом Razor/CSHTML в рамках MVC5 Framework, где я должен взаимодействовать с DYMO LabelWriter 450 Twin Turbo Printer. Моя конечная цель - распечатать данные, найденные на веб-странице, через принтер на этикетке.

Я начал свою работу, следуя образцам, представленным на странице SDK DYMOs, расположенной здесь: http://developers.dymo.com/tag/javascript/

Был образец кода javascript, который использовался в демонстрации примера, который находится здесь: /QRCode.js


Проблема:

При попытке следовать образцам, найденным на странице SDK, я столкнулся с дорожным блоком, где моя программа неправильно назначает barcodeLabel. Кажется, что метод jQuery.get() не находит файл. Я решил, что это проблема, основанная на обратной связи с тестированием Firebug, и приведенная ниже ошибка:

GET http://localhost:29138/device/Barcode.label   404 Not Found   2ms

Кроме того, после оценки конкретного блока кода читается, что barcodeLabel и barcodeAsImageLabel не определены. Код, относящийся к prepping barcodeLabel и barcodeAsImageLabel, и источник моей проблемы, показан ниже:

function loadLabelFromWeb()
{                    
    // use jQuery API to load labels
    $.get("Barcode.label", function(labelXml)
    {
        barcodeLabel = dymo.label.framework.openLabelXml(labelXml);
        alert( "Load was performed for barcodeLabel." );
    });

    $.get("Barcode.label", function(labelXml)
    {
        barcodeAsImageLabel = dymo.label.framework.openLabelXml(labelXml);
        alert( "Load was performed for barcodeAsImageLabel." );
    });
}

Попытки решить:

В качестве теста на работоспособность я убедился, что loadLabelFromWeb() вызван загрузкой страницы, и это было подтверждено для работы. Тем не менее, я не получаю предупреждения от нагрузки, указанной в приведенном выше коде. Файл Print.cshtml и файл Barcode.label хранятся в одном каталоге. Снимок каталога моего решения показан ниже, чтобы отметить местоположения файлов:

> Views
    > Device
        > Barcode.label
        > Print.cshtml

Мои тесты для исправления этой ошибки включают перемещение файла Barcode.label во множество разных мест в рамках решения, а также изменение пути к файлу с использованием window.location.pathname для получения текущего URL-адреса с использованием относительных путей с тильдой '~ и жестким интерфейсом, кодируя путь к файлу. Ни один из этих методов, похоже, не работал, что заставляет меня думать, что MVC5 имеет другой способ обработки путей, чем я привык.

Моя конкретная цель - выяснить, как правильно найти файл Barcode.label, чтобы я мог загружать информацию из файла с помощью jQuery.get().

Теги:
razor
asp.net-mvc-5
get

1 ответ

0
Лучший ответ

Наиболее вероятной причиной вашей проблемы является механизм маршрутизации MVC.

На основе URL http://localhost:29138/device/Barcode.label, механизм маршрутизации MVC ищет метод действия Barcode.label() на DeviceController.

Вы можете решить эту проблему одним из двух способов:

  1. Настройте механизм маршрутизации, чтобы игнорировать маршруты, запрашивающие статические файлы XML. См. Этот вопрос.
  2. Создайте метод действия, который загружает ваш XML файл и выводит XML в качестве ответа.

Вот как вы бы реализовали метод # 2:

public ActionResult LoadBarcodeXml()
{
    string filePath = "\The\Path\To\The\XML\File.xml";
    XmlDocument doc = new XmlDocument();
    doc.Load(filePath);
    return Content(doc.InnerXml, "text/xml");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню