我正在使用以下代码调用部分视图:
$('#btnGetMilestones').click(function () {
$.ajax({
url: "GetMilestones",
type: "get",
success: function (result) {
$('#milestonesContainer').html(result);
},
error: function (xhr, status, error) {
var msg = "Response failed with status: " + status + "</br>"
+ " Error: " + error;
$('#milestonesContainer').html(msg);
},
complete: function (xhr, status) {
var doneMsg = "Operation complete with status: " + status;
alert(doneMsg);
}
});
});
这个ActionResult:
public PartialViewResult GetMilestones()
{
return PartialView("_GetMilestones");
}
部分视图具有项目的里程碑(里程碑和项目是模型)。当我像这样调用局部视图时:
<div id="milestonesContainer">
@Html.Partial("_GetMilestones")
</div>
它工作正常,它获得了项目的所有里程碑。 但是当我尝试通过ajax调用局部视图时,会调用错误:响应失败并显示状态:错误
错误:错误请求
我在项目的详细信息视图中,因此网址如下http://localhost:55623/Projects/Details/2002
我是ajax和javascript的新手,所以如果可能的话,请像对初学者一样解释我。
更新:
在得到一些答案并四处寻找解决方案之后,我理解为什么会出现错误。 我在详细信息视图中,所以网址是这样的:http://localhost:55623/Projects/Details/2002看到有一个ID参数。 当我进行ajax调用时,url就像没有id参数的http://localhost:55623/Projects/Details一样。所以作为回报我得到400错误代码
答案 0 :(得分:2)
而不是url: "GetMilestones"
,请尝试使用url: "@Url.Action("GetMilestones")"
,它将呈现操作的实际相对路径,即/ {Controller} / GetMilestones。
同时确保您在控制器中引用正确的文件名,如您在视图中引用&#34; _GetMilestone&#34;并且你说它有效,但在你的控制器中你引用&#34; _GetMilestone s &#34;如果您的文件名确实是&#34; _GetMilestone&#34;
,则无法解决如果您收到500错误,则表示您可能正在点击该操作,并且在呈现部分视图之前或期间发生异常。尝试通过键入localhost:port/Projects/GetMilestones
直接在浏览器中导航到部分视图操作,然后查看是否显示了例外页面。确保在Startup类的Configure方法中执行类似的操作:
public void Configure (IApplicationBuilder app)
{
app.UseDeveloperExceptionPage();
}
答案 1 :(得分:2)
以我的评论为基础:
抱歉,我对url
一词含糊不清。这就是我的意思:
除非您在浏览器中的当前网址为http://<hostname>/<Controller that contains GetMilestones>
,否则您的AJAX网址不正确。 AJAX网址必须为/<Controller>/GetMilestones
。
开始/
将您带到项目的根目录,然后其余部分由您的路由配置(通常为/Controller/Method/Id
)处理。这就是AJAX网址通常需要/Controller/Method
的原因。但是,如果您处于Index
视图,则您的网址通常为http://<hostname>/Controller
。因此,如果是这种情况并且您的AJAX网址只是Method
,则会将您带到http://<hostname>/Controller/Method
,因为您没有使用/
添加您的AJAX网址。
答案 2 :(得分:2)
您应该考虑利用Url.Action等辅助方法生成要通过ajax调用的操作方法的正确相对路径。如果你是js代码在视图中,你可以简单地调用像
这样的方法Would you like to perform other calculations?(Y/N)
y
Would you like to perform other calculations?(Y/N)
Y
Would you like to perform other calculations?(Y/N)
n
如果它在外部js文件中,您仍然可以使用辅助方法生成路径并将其设置为外部js文件的变量。确保在执行此操作时执行javascript命名空间,以避免可能覆盖js全局变量。
所以在你的视图/布局中你可以这样做
url: "@Url.Action("GetMilestones","Project")",
在<script>
var myApp = myApp || {};
myApp.Urls = myApp.Urls || {};
myApp.Urls.mileStoneUrl= '@Url.Action("GetMilestones","Project")';
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>
文件中,您可以像
PageSpecificExternalJsFile.js
答案 3 :(得分:2)
您需要将第一个网址更改为与路线匹配的内容:
url: "GetMilestones",
type: "get",
contentType: 'application/html; charset=utf-8',
dataType : 'html'
从PartialViewResult切换到ActionResult
去寻找ajax:
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password);
.continueWithTask(new Continuation<AuthResult, Task<Void>>() {
@Override
public Task<Void> then(@NonNull Task<AuthResult> t) throws Exception {
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(fullname)
.build();
return t.getResult().getUser().updateProfile(profileUpdates);
}
})
.addOnFailureListener(this, mOnSignInFailureListener)
.addOnSuccessListener(this, mOnSignInSuccessListener); // <- problem!
答案 4 :(得分:1)
感谢大家回答。我得到了我的问题的答案,也许它有点没有预料到。她是: 改变ajax方法:
$('#btnGetMilestones').click(function () {
$.ajax({
url: '/Projects/GetMilestones/' + "?id=" + window.location.href.split('/').pop(),
type: "GET",
success: function (data) {
$('#milestonesContainer').html(data);
},
error: function (xhr, status, error) {
var msg = "Response failed with status: " + status + "</br>"
+ " Error: " + error;
$('#milestonesContainer').html(msg);
},
complete: function (xhr, status) {
var doneMsg = "Operation complete with status: " + status;
alert(doneMsg);
}
});
});
和行动结果:
public ActionResult GetMilestones(int? id)
{
var forProject = db.Projects.Where(x => x.ID == id).SingleOrDefault();
return PartialView("_GetMilestones",forProject);
}
或者相同的动作结果,但是ajax请求略有不同:
$('#btnGetMilestones').click(function () {
var id;
id = @Model.ID;
$.ajax({
url: '/Projects/GetMilestones',
type: "GET",
data: "id="+id,
success: function (data) {
$('#milestonesContainer').html(data);
},
error: function (xhr, status, error) {
var msg = "Response failed with status: " + status + "</br>"
+ " Error: " + error;
$('#milestonesContainer').html(msg);
},
complete: function (xhr, status) {
var doneMsg = "Operation complete with status: " + status;
alert(doneMsg);
}
});
});