我在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调用停止了工作。
为什么?
答案 0 :(得分:0)
在Jonathon Chase和charlietfl条评论的帮助下,我意识到我在我的JavaScript文件中使用了Razor语法,导致我的AJAX url
属性被字面上理解,请将我发送至https://{whateverMyUrlMyBe.com}/@Url.Action("AddGrandchild", "Home")
,但无法找到并返回404错误。
要解决此问题,我所要做的就是将url
值更改为:
$.ajax({
url: '/Home/AddGrandchild',
...
});