404.15未找到MVC 4 Razor JS

时间:2014-12-30 08:58:09

标签: asp.net-mvc asp.net-mvc-4 razor razorengine

我在RazorJS应用程序中使用MVC4来使用Razor语法" @"在Js文件中。

//代码:

@Html.RazorJSInclude("~/Scripts/Application/Transactions.js")
<button id="btnSearch" name="submit" type="button" onclick="Loadgrid();">Search</button>

&#34; Transaction.js&#34;有&#34; LoadGrid&#34; mehtod里面。当我使用我的Transaction.js作为上面的代码时,它会抛出错误&#34;没有找到这样的方法(Loadgrid)&#34;。

浏览器中呈现的HTML显示为,

<SCRIPT src="/razorjs.axd?fn=/Scripts/Application/Transactions.js" type="text/javascript"></SCRIPT>

当我尝试使用这样的时候,

<script src="~/Scripts/Application/Transactions.js"></script>
@Html.RazorJSInclude("~/Scripts/Application/Transactions.js")

浏览器接受js文件,但js文件中的ajax调用未被调用,并将以下异常作为警报抛出。

IIS 8.0 Detailed Error-404.15-Not Found

有一些HTML内容。

// js文件中的代码

function Loadgrid() {

    $.ajax({
        url: '@Url.Action("LoadColumns", "Home")',
        data: { 'workflowId': '5' },
        datatype: 'json',
        type: 'GET',
        cache: false,
        success: OnComplete,
        error: function (xhr, status, error) {
                alert(xhr.statusText);
                window.location.href = '@Url.Action("LogOut", "Account")';
        }
    });
}

//控制器:

    public ActionResult LoadColumns(string workflowId)
    {
      return Content("Success");
    }

加载列方法没有被击中。我哪里错了?

FYI,

在像url: '/Home/LoadColumns'这样的ajax调用中使用url时,代码运行得非常好,但仅限于本地机器而不是服务器(dev中的主机)。

RazorJS版本 0.4.3

来源:Razor inside Js file

1 个答案:

答案 0 :(得分:1)

您在ajax调用中指定了datatype: 'json',但您的控制器操作return Content("Success");其中内容将是纯文本且不允许,更改为return Json(new { foo = "bar", baz = "Blech" }, JsonRequestBehavior.AllowGet),然后,您说你的脚本中的ajax调用没有被调用,然后你说你检索了一个警报,这个警告:

alert(xhr.statusText);

所以你的函数按预期调用。不要使用警报进行调试,请尝试:

console.log(error);

您首选的开发人员工具的网络标签也可以提供更好的工作,然后提醒。

Here you can find a simple working example来完成你的任务:

<强> \视图\主页\ Index.cshtml

@Html.RazorJSInclude("~/Scripts/App/TestRazorJS.js")
<button id="btnSearch" name="submit" type="button" onclick="LoadFromRazor()">Search</button>

<强> \脚本\应用\ TestRazorJS.js

function LoadFromRazor() {
  $.ajax({
    url: '@Url.Action("Test", "Home")',
    datatype: 'json',
    type: 'GET',
    cache: false,
    success: function () { console.log('done'); },
    error: function (xhr, status, error) {
      console.log(status);

    }
  });
}

<强> \控制器\ HomeController.cs

public ActionResult Test()
    {
      return Json(new { foo = "bar", baz = "Blech" }, JsonRequestBehavior.AllowGet);
    }

enter image description here

enter image description here

它按预期工作。