【发布时间】:2018-01-24 03:05:25
【问题描述】:
我正在使用 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 上方添加另一个孙子部分视图。
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 警报中收到此错误:
请求:[对象对象]
状态:错误
错误:未找到
之前,我将这个 JavaScript 放在底部的 Main.cshtml 部分的 <script> 中。现在我将它移到了一个名为 mainFunctions.js 的文件中,我在 Main.cshtml 中引用它,底部的 <script src="~/Scripts/Custom/mainFunctions.js"></script> 是最后加载的脚本。
到目前为止,我的其他功能看起来还不错,但只有我的 AJAX 调用停止工作。
这是为什么呢?
【问题讨论】:
-
我怀疑
Url.Action调用返回的是相对 URL。如果将 ajax 调用中的url值更改为'@Url.Action("AddGrandchild", "Home", null, Request.Url.Scheme)',会发生什么? -
遗憾的是没有变化
-
如果你打开浏览器的开发者工具,你会在网络信息中看到什么关于调用的信息?是否针对正确的资源?
-
听起来您正在尝试在 javascript 文件中使用 Razor 代码。
-
这正是正在发生的事情。我会在您的 addGrandchild 函数中添加一个 url 参数,并在按钮的
onClick方法中传递值。
标签: javascript c# jquery ajax asp.net-mvc