无法从我本地的脚本文件中进行相同的AJAX调用

时间:2018-01-23 18:31:02

标签: javascript c# jquery ajax asp.net-mvc

我在C#MVC 5工作

我有一个Main.cshtml页面,其中包含许多部分视图 其中一个部分视图Child会将更多部分视图Grandchild加载到其中

if (Model.ChildViewModel.GrandchildViewModels.Count == 0)
{
    { Html.RenderPartial("_PartialGrandchild", new GrandchildViewModel()); }
}
else
{
    foreach (var grandchildViewModel in Model.ChildViewModel.GrandchildViewModels)
    {
        { Html.RenderPartial("_PartialGrandchild", grandchildViewModel); }
    }
}
<div id="newGrandchild"></div>
<div class="row">
    <button class="btn btn-xs btn-primary btn-block" type="button" onclick="addGrandchild('#newGrandchild')">Add A Grandchild</button>
</div>

如果查看倒数第二行,您会看到一个onclick事件链接到addGranchild('#newGrandchild')的按钮。这会调用我的AJAX函数在我的newGrandchild div上面添加另一个Grandchild Partial View。

这里显示了AJAX功能:

function addGrandchild(divToReplace) {
    $.ajax({
        url: '@Url.Action("AddGrandchild", "Home")',
        data: {},
        type: "POST",
        error: function (xmlHttpRequest, textStatus, errorThrown) {
            alert("Request: " + xmlHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
        },
        success: function (data) {
            $(divToReplace).before(data);
        }
    });
}

反过来调用此处显示的HomeController方法AddGrandchild

[HttpPost]
public PartialViewResult AddGrandchild()
{
    return PartialView("_PartialGrandchild", new GrandchildViewModel());
}

我的问题:
我没有在我的HomeController中遇到断点,而且我在我的AJAX警报中收到此错误:

  

请求:[object Object]
  状态:错误
  错误:未找到

之前,我将此JavaScript留在Main.cshtml部分底部的<script>。现在我已将其移至名为mainFunctions.js的文件中,并且我在Main.cshtml中引用它,其中<script src="~/Scripts/Custom/mainFunctions.js"></script>位于底部,这是最后加载的脚本。

到目前为止,我的其他功能看起来还不错,但只有我的AJAX调用停止了工作。

为什么?

1 个答案:

答案 0 :(得分:0)

Jonathon Chasecharlietfl条评论的帮助下,我意识到我在我的JavaScript文件中使用了Razor语法,导致我的AJAX url属性被字面上理解,请将我发送至https://{whateverMyUrlMyBe.com}/@Url.Action("AddGrandchild", "Home"),但无法找到并返回404错误。

要解决此问题,我所要做的就是将url值更改为:

$.ajax({
    url: '/Home/AddGrandchild',
    ...
});