Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用控制器,但不立即重定向到另一个视图_Javascript_C#_Asp.net_.net_Asp.net Core - Fatal编程技术网

Javascript 调用控制器,但不立即重定向到另一个视图

Javascript 调用控制器,但不立即重定向到另一个视图,javascript,c#,asp.net,.net,asp.net-core,Javascript,C#,Asp.net,.net,Asp.net Core,我正在使用ASP.NET内核 我想在我的应用程序中添加简单的登录功能 所以我有表格填写密码和登录和按钮提交数据 在提交数据时,我创建HTTPPOST请求,该请求调用控制器中的适当方法。控制器的结果是另一个视图,用户被重定向到该视图(基于登录结果) 我想做的是:调用controller检查登录是否成功,根据该结果,不重定向到其他页面,我想显示一些关于登录成功的弹出窗口,然后重定向到相应的视图 我能想到的是调用控制器两次:第一次用于登录,第二次用于重定向。这条路对吗?还是有更好的方法 我想到的另一种

我正在使用ASP.NET内核

我想在我的应用程序中添加简单的登录功能

所以我有表格填写密码和登录和按钮提交数据

在提交数据时,我创建HTTPPOST请求,该请求调用控制器中的适当方法。控制器的结果是另一个视图,用户被重定向到该视图(基于登录结果)

我想做的是:调用controller检查登录是否成功,根据该结果,不重定向到其他页面,我想显示一些关于登录成功的弹出窗口,然后重定向到相应的视图

我能想到的是调用控制器两次:第一次用于登录,第二次用于重定向。这条路对吗?还是有更好的方法


我想到的另一种方法是在显示弹出窗口后使用JavaScript创建HTTP请求。

您可以根据用户成功/不成功登录,尝试通过控制器方法返回布尔值。然后可以使用此结果显示弹出窗口,然后从该弹出窗口重定向用户。
从JavaScript创建HTTP请求也是一个不错的选择。

关于您的场景,最好的方法是使用
AJAX
将表单数据发送到
控制器
方法,并根据
控制器
方法的响应,在
视图
上执行适当的操作。一个非常简单的例子是:

示例视图:

  <table class="table table-striped">    
    <tr>
      <td>Username: </td>
      <td><input type="text" class="form-control" id="username" required></td>
    </tr>
    <tr>
      <td>Password: </td>
      <td><input type="password" class="form-control" id="userpassword" required></td>
    </tr>
  </table>
  <div class="box-footer">
    <button type="button" class="btn btn-primary" onclick="AuthenticateUser()">Submit</button>
  </div>

<script>
function AuthenticateUser() {
  var username= $("#username").val();
  var password= $("#userpassword").val();

  var json = {
          username: username,
          password: password,
         };

  $.ajax({
      type: "post",
      dataType: "json",
      data: {"json": JSON.stringify(json)},,
      url: "@Url.Action("AuthenticateUser","Home")",
      success: function (data) {
          if(data.status=="true")
          {
            var urlToRedirect= '@Url.Action("RedirectMethod","Home")';
            window.location.href = urlToRedirect; //Redirect here
          }
          else if(data.status=="false")
          {
            alert(data.msg)
          }
      },
      error:function(err){
          console.log(err);
      }            
  });
}
</script>

希望这对您有所帮助。

发送两个请求对我来说确实有意义。您正在检查身份验证的第一个请求-您不想重定向。如果您已通过身份验证并且满足身份验证条件的显示,则您希望执行重定向。我不确定您的前端是什么,也不确定您的确切显示条件。但是使用类似angular的方法,您也可以这样做,以节省两个请求的费用。经过一些小的改变,这是我一直在考虑的解决方案,我认为这是一条路要走。
using System.Web.Script.Serialization;

[HttpPost]
public ActionResult AuthenticateUser(string json)
{

  var serializer = new JavaScriptSerializer();
  dynamic jsondata = serializer.Deserialize(json, typeof(object));

  //Get your variables here from AJAX call
  var username= jsondata["username"];
  var password= jsondata["password"];

  bool result=db.Authenticate(username,password) //Can be API call or DB call 

  if(bool)
  {
   return Json(new {status="true", msg= "successful authentication"}, JsonRequestBehavior.AllowGet);
  }
  else
  {
   return Json(new {status="false", msg= "Incorrect credentials given"}, JsonRequestBehavior.AllowGet);
  }

}