Ajax 在 Controller 中调用 JsonResult 失败并出现 404 错误,"resource not found"
Ajax call to JsonResult in Controller fails with 404 error, "resource not found"
这是我 "ManageUserRoles.cshtml" 中的 ajax 代码:
//HIT THE DATABASE FOR USERNAME GIVING IT THIS USERNAME
function isUserValid(thisUser) {
$.ajax({
url: "/Roles/isUserValid/" + thisUser,
type: 'POST',
success: handleResultResponseUserName,
error: function (xhr) { alert("Error..."); }
});
}
//handles data back from ajax call
//RESET INPUT IF NO USER IF FOUND IN USER'S TABLE
function handleResultResponseUserName(ResponseObject) {
if (ResponseObject == "no user with this number") {
$('#frmGetRoles').find('input[name="UserName"]').val(null);
}
else {
//DO NOTHING
}
}
这是我的 RolesController 中的 JsonResult:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult isUserValid(string username)
{
var name = string.Empty;
var CheckUserExists = (from c in _db.AspNetUsers
where (c.UserName.Equals(username))
select c);
var results = new JsonResult();
if (CheckUserExists.Any())
{
name = CheckUserExists.First().UserName;
}
else
{
name = "no user with this name in database";
}
return Json(name, JsonRequestBehavior.DenyGet);
}
我在不同的应用程序中获得了几乎完全相同的代码,我将其剪切并粘贴到一个新的应用程序中,我试图将其用于角色管理。
json 参考在 web.config 中。但是当我在 JsonResult 中放置一个断点时,它永远不会停在那里并且从客户端返回错误 javascript(404 资源未找到)。此新应用中没有使用其他 json 内容。 . .还.
我可以按 f5 然后它 returns:
http://localhost/StoreMasterSecure/Roles/ManageUserRoles
这是具有运行 ajax 按钮的视图。这一切都进入了 ajax 调用,然后什么也没有发生,Chrome 开发人员工具控制台显示 404 错误。
即使我输入 URL 路径,我也会得到找不到资源的 404 页面:
http://localhost/StoreMaster/Roles/isValidUser/xxxx@xxx.com
(isValidUser 是控制器中的 JsonResult,在 ManageUserRoles ActionResult 存在并起作用的同一控制器中)
为确保正确生成 url,请使用 Url.Action()
方法并使用 ajax data
选项传递数据。将您的 ajax 更改为
$.ajax({
url: '@Url.Action("isUserValid", "Roles")', // change this
data: { username: thisUser }, // add this
type: 'POST',
success: handleResultResponseUserName,
error: function (xhr) { alert("Error..."); }
});
您还需要从控制器方法中删除 [ValidateAntiForgeryToken]
属性,因为您没有传递令牌。
旁注:MVC 附带了一个 RemoteAttribute
来处理这种情况。请参阅 How to: Implement Remote Validation in ASP.NET MVC,这意味着您不需要您的脚本。
这是我 "ManageUserRoles.cshtml" 中的 ajax 代码:
//HIT THE DATABASE FOR USERNAME GIVING IT THIS USERNAME
function isUserValid(thisUser) {
$.ajax({
url: "/Roles/isUserValid/" + thisUser,
type: 'POST',
success: handleResultResponseUserName,
error: function (xhr) { alert("Error..."); }
});
}
//handles data back from ajax call
//RESET INPUT IF NO USER IF FOUND IN USER'S TABLE
function handleResultResponseUserName(ResponseObject) {
if (ResponseObject == "no user with this number") {
$('#frmGetRoles').find('input[name="UserName"]').val(null);
}
else {
//DO NOTHING
}
}
这是我的 RolesController 中的 JsonResult:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult isUserValid(string username)
{
var name = string.Empty;
var CheckUserExists = (from c in _db.AspNetUsers
where (c.UserName.Equals(username))
select c);
var results = new JsonResult();
if (CheckUserExists.Any())
{
name = CheckUserExists.First().UserName;
}
else
{
name = "no user with this name in database";
}
return Json(name, JsonRequestBehavior.DenyGet);
}
我在不同的应用程序中获得了几乎完全相同的代码,我将其剪切并粘贴到一个新的应用程序中,我试图将其用于角色管理。
json 参考在 web.config 中。但是当我在 JsonResult 中放置一个断点时,它永远不会停在那里并且从客户端返回错误 javascript(404 资源未找到)。此新应用中没有使用其他 json 内容。 . .还.
我可以按 f5 然后它 returns: http://localhost/StoreMasterSecure/Roles/ManageUserRoles 这是具有运行 ajax 按钮的视图。这一切都进入了 ajax 调用,然后什么也没有发生,Chrome 开发人员工具控制台显示 404 错误。
即使我输入 URL 路径,我也会得到找不到资源的 404 页面: http://localhost/StoreMaster/Roles/isValidUser/xxxx@xxx.com
(isValidUser 是控制器中的 JsonResult,在 ManageUserRoles ActionResult 存在并起作用的同一控制器中)
为确保正确生成 url,请使用 Url.Action()
方法并使用 ajax data
选项传递数据。将您的 ajax 更改为
$.ajax({
url: '@Url.Action("isUserValid", "Roles")', // change this
data: { username: thisUser }, // add this
type: 'POST',
success: handleResultResponseUserName,
error: function (xhr) { alert("Error..."); }
});
您还需要从控制器方法中删除 [ValidateAntiForgeryToken]
属性,因为您没有传递令牌。
旁注:MVC 附带了一个 RemoteAttribute
来处理这种情况。请参阅 How to: Implement Remote Validation in ASP.NET MVC,这意味着您不需要您的脚本。