ASP.NET核心-如何将Javascript变量从视图传递到控制器

ASP.NET核心-如何将Javascript变量从视图传递到控制器,javascript,c#,ajax,asp.net-core,model-view-controller,Javascript,C#,Ajax,Asp.net Core,Model View Controller,我在Javascript函数中有一个变量,我想将它发送给控制器,以便激活指定的方法 以下是视图中javascript函数的代码: var email = response.email; //String with an email address $.ajax({ type: "POST", url: '@Url.Action("Login", "UsersController")', dataT

我在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非常陌生,所以我不知道如何处理它。
谢谢。

由于控制器中的参数名为
email
,因此您也应该在发送
email
的对象中命名属性。因此,您的ajax调用应该是

$.ajax({
类型:“POST”,
url:'@url.Action(“登录”,“用户控制器”),
数据类型:“html”,

数据:{email:email},//首先,ajax中url中指定的控制器名称需要删除控制器,即将UsersController更改为Users

并且在传递的参数数据中,将
{data:email}更改为{email:email}
,或者将登录操作接收的参数名称从
email更改为data
更改为,确保传递的参数名称与接收的参数名称一致

如果您想提醒更新信息,然后跳转到相应的视图,则需要将登录操作中的不同信息返回到success方法,然后判断success方法中的数据,然后跳转

行动:

[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中的代码是一个简化的判断。)


您遇到的错误是什么?请给
用户
而不是
用户控制器
。并且数据类型不是
HTML
删除该错误,并更新URL tp
URL:'/Users/Login'
有关详细信息,请参阅此,谢谢您提供的详细答案!非常有效:)
[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");
    }