繁体   English   中英

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

[英]Calling controller, but not redirecting to another view immediately

我正在使用 ASP.NET Core。

我想为我的应用程序添加简单的登录功能。

所以我有表格来填写密码和登录名以及提交数据的按钮。

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

我想要做的是:调用控制器只是为了检查登录是否成功,基于该结果,而不重定向到其他页面,我想显示一些关于登录成功的弹出窗口,然后重定向到适当的视图。

我能想到的是两次调用控制器:第一次用于登录验证,第二次用于重定向。 这是正确的方法吗? 或者有什么更好的方法吗?

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

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

示例视图:

  <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>

示例Controller方法:

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);
  }

}

希望这可以帮助你。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM