如何在Razor / CSHTML项目中正确使用jQuery.get()?

时间:2014-02-19 14:35:34

标签: jquery xml razor get asp.net-mvc-5

快速概述:

我正在尝试使用jQuery.get()函数加载XML文件“Barcode.label”。但是,jQuery.get()无法找到该文件。我认为这个问题可能是由于在MVC5中工作并尝试使用错误的路径约定来查找文件。如何在MVC5 Razor / CSHTML Web项目中获取文件的正确路径?

如果需要有关此特定问题的更多信息,请在下面发布。这是我第一次在这里提问,所以我提前为任何歧义道歉。


前言

我正在使用MVC5框架下的Razor / CSHTML Web项目,我必须与DYMO LabelWriter 450双涡轮增压打印机连接。我的最终目标是通过打印机将网页上的数据打印到标签纸上。

我按照DYMO SDK页面上提供的示例开始了我的工作:http://developers.dymo.com/tag/javascript/

示例演示中使用了一个javascript代码示例,该示例位于:http://labelwriter.com/software/dls/sdk/samples/js/QRCode/QRCode.js


问题:

在尝试按照SDK页面中找到的示例时,我遇到了一个路障,我的程序没有正确分配barcodeLabel。似乎jQuery.get()方法没有找到该文件。我根据Firebug测试的反馈确定了这个问题,错误如下所示:

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

此外,对特定代码块的后评估会读取barcodeLabel和barcodeAsImageLabel未定义。与准备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()从文件中加载信息。

1 个答案:

答案 0 :(得分:0)

问题的最可能原因是MVC路由引擎。

基于URL http://localhost:29138/device/Barcode.label,MVC路由引擎正在Barcode.label()上寻找一种操作方法DeviceController

您可以使用以下两种方法之一解决此问题:

  1. 配置路由引擎以忽略请求静态XML文件的路由。 See this question.
  2. 创建一个加载XML文件的操作方法,并将XML作为响应输出。
  3. 以下是如何实施方法#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");
    }