C# 使用Ajax C在不同的控制器/动作中调用动作#
我有C# 使用Ajax C在不同的控制器/动作中调用动作#,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我有\u布局文件,我想在我的项目的不同页面上显示什么 \u layout.cshtml <html> xxxxx </html> 在我的\u布局中添加了以下行: @{Html.RenderAction("BarraNavegacion", "NavBar");} 目前一切正常,导航栏显示良好 我的导航栏有一个注销按钮,所以我尝试使用ajax实现注销方法 脚本注销 //Boton salir $('.salirUsuario').click(function()
\u布局
文件,我想在我的项目的不同页面上显示什么
\u layout.cshtml
<html>
xxxxx
</html>
在我的\u布局中
添加了以下行:
@{Html.RenderAction("BarraNavegacion", "NavBar");}
目前一切正常,导航栏显示良好
我的导航栏有一个注销按钮,所以我尝试使用ajax实现注销方法
脚本注销
//Boton salir
$('.salirUsuario').click(function() {
console.log("salio");
$.ajax({
url: 'LogOut',
method: "POST",
data: { data: "xx" },
async: false,
dataType: "json",
success: function (json) {
window.location.href = '@Url.Action("Login","Login")';
}
});
但收到以下控制台错误
jquery-3.4.1.min.js:2 POST http://localhost:9887/Home/LogOut 404 (Not Found)
我知道应用程序试图在“
Home
”中找到方法/操作“LogOut
”(这是我目前所在的视图),但如何转到我创建的名为NavBar
的控制器的导航栏/注销,而不转到“Home
或者我当时所在的任何其他视图?如果您想为以下几个视图包括导航栏,可以添加以下行
@Html.Partial("~/Views/Controller/View.cshtml", model)
假设您想在主布局页面中使用它,请在\u layout.chtml
中添加上述代码,您可以调用以下代码来呈现主布局
@{
Layout = "~/Views/Shared/_layout.cshtml";
}
对于注销,只需执行以下脚本
$('.salirUsuario').click(function() {
window.location.href = '/NavBar/LogOut';
});
您想要发布到的注销操作位于
NavBarController
上,但在您当前的AJAX函数中,asp.net MVC框架将尝试在默认控制器路径上找到LogOut
路径,该路径是您的“主”控制器,因为您正在将AJAX URL属性设置为URL:“LogOut”
。您需要更具体地了解URL中的路由位置
对于Razor页面javascript:
您的AJAX Url需要包含控制器路径,因此如果此javascript位于razorpage(.cshtml)文件中,您可以执行以下操作:
对于引用的javascript文件: 如果您的javascript代码位于单独的javascript文件中并被引用,那么您可以在布局页面中为应用程序的基本URL路径创建一个变量,然后,您可以在任何包含的javascript文件中使用该变量,只要在添加任何
script
标记以引用javascript文件之前在布局页面中声明该变量即可
布局页面文件第一个脚本标记可以是:
<script type="text/javascript">
var baseApplicationPath = '@Url.Content("~/")';
</script>
我认为你没有抓住重点。您的局部视图与您的操作方法以及如何实现它们无关。只要正确定义了路由,就可以使用AJAX调用任何控制器的任何操作方法并在那里处理逻辑。从技术上讲,您可以调用主页
控制器的注销
方法,根据您的逻辑,您可以发回注销状态,并在视图
上执行适当的重定向。您还应阅读此答案以了解更多信息:
$.ajax({
url: '@Url.Content("~/NavBar/LogOut")',
method: "POST",
data: { data: "xx" },
async: false,
dataType: "json",
success: function (json) {
window.location.href = '@Url.Action("Login","Login")';
}
});
<script type="text/javascript">
var baseApplicationPath = '@Url.Content("~/")';
</script>
$.ajax({
url: baseApplicationPath + 'NavBar/LogOut',
method: "POST",
data: { data: "xx" },
async: false,
dataType: "json",
success: function (json) {
window.location.href = baseApplicationPath + 'Login/Login';
}
});