javascript - ASP.NET Core - 如何将 Javascript 变量从视图传递到控制器
问题描述
我在 Javascript 函数中有一个变量,我想将其发送到控制器以激活指定的方法。
这是视图中 javascript 函数的代码:
var email = response.email; //String with an email address
$.ajax({
type: "POST",
url: '@Url.Action("Login", "UsersController")',
dataType: "html",
data: { data: email },
success: function (data) {
alert('Your data updated');
return data;
},
error: function (jqXHR, textStatus) {
alert(textStatus);
}
});
这是我想在控制器中激活的方法:
[HttpPost]
public IActionResult Login(string email)
{
var user = _context.User.FirstOrDefault(u => u.Email == email);
if (user != null)
{
SignIn(user);
return RedirectToAction("Index", "Home");
}
return View("Login", "Users");
}
每次我运行它时都会收到错误警报,我对 Ajax 还是很陌生,所以我不知道如何处理它。谢谢。
解决方案
首先,ajax中url中指定的控制器名称需要去掉Controller,即将UsersController改为Users。
并且在传递的参数数据中,更改{data:email} to {email:email}
,或者更改Login动作接收参数名 fromemail to data
以保证传递的参数名和接收到的参数名一致。
而如果要提示更新信息然后跳转到对应的视图,需要在Login动作中返回不同的信息给success方法,然后在success方法中判断数据再跳转。
$.ajax({
type: "POST",
url: '@Url.Action("Login", "Users")',
dataType: "html",
data: { email: email },
success: function (data) {
if (data == "Success") {
alert('Your data updated');
window.location.href = "/Home/Index";
} else {
alert("Please enter correct email!");
}
},
error: function (jqXHR, textStatus) {
alert(textStatus);
}
});
行动:
[HttpPost]
public IActionResult Login(string email)
{
var user = _context.User.FirstOrDefault(u => u.Email == email);
if (user != null)
{
SignIn(user);
return Content("Success");
}
return Content("Wrong");
}
下面是测试结果:(gif中的代码为简化判断。)
推荐阅读
- android - Facebook 聊天插件可以在 React Native 应用程序中使用吗?
- google-cloud-platform - 使用 gcloud cli 将子网附加到现有 Cloud NAT
- xamarin - Xamarin UI 测试 - 手机/平板电脑的不同元素选择器
- c++ - ARM 平台特定的 Qmake.bin
- sql - 如何在蜂巢中使用填充实现四舍五入到小数点后两位?
- angular - 在 NGRX SPA 中,每次验收测试后,您应该如何重置状态?
- lua - LUA - 从其他模块调用函数而不导出表
- azure - 我无法弄清楚为什么这个 Azure CLI 不能在我的 Azure Pipeline 中工作
- python - 如何为每个点添加标签 - mplsoccer
- vue.js - 在 VueJS 中加载页面之前,无法使加载器微调器旋转