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