Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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 如何通过Ajax-MVC返回无效密码错误消息_Javascript_C#_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript 如何通过Ajax-MVC返回无效密码错误消息

Javascript 如何通过Ajax-MVC返回无效密码错误消息,javascript,c#,ajax,asp.net-mvc,Javascript,C#,Ajax,Asp.net Mvc,我有一个登录页面,用户在其中输入他们的电子邮件和密码,但我想显示一个警报或类似文本(您输入了无效密码),当他们输入错误的密码。我已经检查了Checkpass是否不为空,请做点什么,否则我不知道该怎么做。请任何人帮助我或为我指出正确的方向 提前感谢:) 控制器: [HttpPost] public JsonResult Login(string Mail, string pass) { var hashedPass = PasswordSecurity.P

我有一个登录页面,用户在其中输入他们的电子邮件和密码,但我想显示一个警报或类似文本(您输入了无效密码),当他们输入错误的密码。我已经检查了
Checkpass
是否不为空,请做点什么,否则我不知道该怎么做。请任何人帮助我或为我指出正确的方向

提前感谢:)

控制器:

    [HttpPost]
    public JsonResult Login(string Mail, string pass)
    {

        var hashedPass = PasswordSecurity.PasswordStorage.CreateHash(pass);
        using (DbNameSpace db = new DbNameSpace())
        {
            var query = from cbr in db.Contact_Business_Relation
                        join c in db.Contact on cbr.Contact_No_ equals c.Company_No_

                        join sa in db.Sales_Header on cbr.No_ equals sa.Sell_to_Customer_No_
                        join px in db.PX2 on c.E_Mail equals px.Email_ID

                        where c.E_Mail == Mail.ToLower()
                        select new
                        {
                            Mail = c.E_Mail,
                            pass = px.PS,

                        };

            var user = query.FirstOrDefault();
            var CheckPass = PasswordSecurity.PasswordStorage.VerifyPassword(pass, user.pass);

            if (user != null && CheckPass) //Checkpassword
            {

                Session["Email"] = user.Mail.ToString();

            }

     else {

                // ??
         }

            return Json(user, JsonRequestBehavior.AllowGet);
        }


    }
JavaScript:

<script>

    $(document).ready(function () {

        $("#login").click(function (e) {

            var email = $("input[name=Mail]").val();
            var password = $("input[name=pass]").val();
            e.preventDefault();


            $.ajax({

                type: "POST",
                dataType: "json",
                url: '@Url.Action("Login", "Account")',
                data: { Mail: email, pass: password },
                success: function (status) {


                    if (status) {

                        window.location.href = "/Account/Index";

                    }


                }

            });

        });
    });

</script>

$(文档).ready(函数(){
$(“#登录”)。单击(功能(e){
var email=$(“输入[名称=邮件]”).val();
var password=$(“输入[name=pass]”)。val();
e、 预防默认值();
$.ajax({
类型:“POST”,
数据类型:“json”,
url:'@url.Action(“登录”、“帐户”),
数据:{Mail:email,pass:password},
成功:功能(状态){
如果(状态){
window.location.href=“/Account/Index”;
}
}
});
});
});
视图:


电子邮件
密码
登录

通常要做的事情是将响应状态设置为401,并忽略将随成功响应一起发送的常规数据有效负载。然后由客户机代码识别错误状态并做出适当响应(例如,可能通过显示警报并保留在名称/密码表上);此客户端行为将在
$.ajax
调用中指定。

查看此jquery教程。我个人会使用Fail和Done回调方法。修改c#控制器以返回不同的HTTP状态代码。当他们传递一个好的用户名和密码时,使用HTTP 200。当他们传递错误密码时使用HTTP 400这将触发Fail()回调并允许您在失败时发出警报

//使用core$.ajax()方法
$.ajax({
//请求的URL
url:“post.php”,
//要发送的数据(将转换为查询字符串)
数据:{
身份证号码:123
},
//这是一个POST还是GET请求
键入:“获取”,
//我们期望返回的数据类型
数据类型:“json”,
})
//请求成功(完成)时要运行的代码;
//响应被传递给函数
.done(函数(json){
$(“”).text(json.title).appendTo(“body”);
$(“”).html(json.html).appendTo(“body”);
})
//请求失败时要运行的代码;原始请求和
//状态代码被传递给函数
.失败(功能(xhr、状态、错误)**{
警报(“抱歉,出现问题!”);
log(“错误:+errorshown”);
控制台日志(“状态:+状态”);
console.dir(xhr);
})
//无论成功或失败都要运行的代码;
.始终(功能(xhr、状态){
警报(“请求已完成!”);
});

这就是一个例子。希望能帮上忙,我的朋友

[HttpPost]
    public JsonResult Login(string Mail, string pass)
    {
        var status = true; 
        var hashedPass = PasswordSecurity.PasswordStorage.CreateHash(pass);
        using (DbNameSpace db = new DbNameSpace())
        {
            var query = from cbr in db.Contact_Business_Relation
                        join c in db.Contact on cbr.Contact_No_ equals c.Company_No_

                        join sa in db.Sales_Header on cbr.No_ equals sa.Sell_to_Customer_No_
                        join px in db.PX2 on c.E_Mail equals px.Email_ID

                        where c.E_Mail == Mail.ToLower()
                        select new
                        {
                            Mail = c.E_Mail,
                            pass = px.PS,

                        };

            var user = query.FirstOrDefault();
            var CheckPass = PasswordSecurity.PasswordStorage.VerifyPassword(pass, user.pass);

            if (user != null && CheckPass) //Checkpassword
            {

                Session["Email"] = user.Mail.ToString();

            }

     else {
                status = false;                
         }

            return Json(status, JsonRequestBehavior.AllowGet);
        }


    }
在Javascript中:

<script>

    $(document).ready(function () {

        $("#login").click(function (e) {

            var email = $("input[name=Mail]").val();
            var password = $("input[name=pass]").val();
            e.preventDefault();


            $.ajax({

                type: "POST",
                dataType: "json",
                url: '@Url.Action("Login", "Account")',
                data: { Mail: email, pass: password },
                success: function (status) {
                    if (status) {
                        window.location.href = "/Account/Index";
                    }else{
                         $('#invalidpassword').html('You have entered wrong password!');
                    }


                }

            });

        });
    });

</script>

$(文档).ready(函数(){
$(“#登录”)。单击(功能(e){
var email=$(“输入[名称=邮件]”).val();
var password=$(“输入[name=pass]”)。val();
e、 预防默认值();
$.ajax({
类型:“POST”,
数据类型:“json”,
url:'@url.Action(“登录”、“帐户”),
数据:{Mail:email,pass:password},
成功:功能(状态){
如果(状态){
window.location.href=“/Account/Index”;
}否则{
$('invalidpassword').html('您输入了错误的密码!');
}
}
});
});
});

这就是我如何归档如何返回无效密码错误消息的方法,也许这对某个人有帮助:)

我创建了一个
enum
来保存MessageType的值:

  public enum MessageType
    {
        Valid,
        InvalidEmail,
        InvalidUerNameAndPass,
    }
    public JsonResult Login(string Mail, string pass)
    {
        MessageType messageType = MessageType.InvalidEmail;

        using (DbNamesapce db = new DbNamesapce())
        {
            var query = // do Join
                        select new
                        {
                            //Select Something
                        };

            var user = query.FirstOrDefault();

            if (user == null)
            {
                return Json(new { messageType = MessageType.InvalidEmail }, JsonRequestBehavior.AllowGet);
            }

            if (user != null && CheckPass)
            {
                messageType = MessageType.Valid;
            }

            else
            {
                messageType = MessageType.InvalidUerNameAndPass;
            }

            return Json(new { messageType = messageType }, JsonRequestBehavior.AllowGet);
        }

    }
然后我更改控制器以获得不同的消息类型:

  public enum MessageType
    {
        Valid,
        InvalidEmail,
        InvalidUerNameAndPass,
    }
    public JsonResult Login(string Mail, string pass)
    {
        MessageType messageType = MessageType.InvalidEmail;

        using (DbNamesapce db = new DbNamesapce())
        {
            var query = // do Join
                        select new
                        {
                            //Select Something
                        };

            var user = query.FirstOrDefault();

            if (user == null)
            {
                return Json(new { messageType = MessageType.InvalidEmail }, JsonRequestBehavior.AllowGet);
            }

            if (user != null && CheckPass)
            {
                messageType = MessageType.Valid;
            }

            else
            {
                messageType = MessageType.InvalidUerNameAndPass;
            }

            return Json(new { messageType = messageType }, JsonRequestBehavior.AllowGet);
        }

    }
我将脚本更改为:

<script>

    $(document).ready(function () {

        $("#login").click(function (e) {
            var email = $("input[name=Mail]").val();
            var password = $("input[name=pass]").val();
            e.preventDefault();

            $.ajax({
                type: "POST",
                dataType: "json",
                url: '@Url.Action("Login", "Account")',
                data: { Mail: email, pass: password },
                success: function (response) {

                    switch ($.trim(response.messageType))
                    {
                        case '@Convert.ToInt32(YourNAmeSpace.Models.MessageType.Valid)':
                            alert("Valid");
                            break;
                        case '@Convert.ToInt32(YourNAmeSpace.Models.MessageType.InvalidEmail)':
                             alert("InvalidUerNameAndPass");
                            break;
                       case '@Convert.ToInt32(YourNAmeSpace.Models.MessageType.InvalidUerNameAndPass)':
                            alert("InvalidUerNameAndPass");
                            break;

                    }

                }

            });

        });
    });

</script>

$(文档).ready(函数(){
$(“#登录”)。单击(功能(e){
var email=$(“输入[名称=邮件]”).val();
var password=$(“输入[name=pass]”)。val();
e、 预防默认值();
$.ajax({
类型:“POST”,
数据类型:“json”,
url:'@url.Action(“登录”、“帐户”),
数据:{Mail:email,pass:password},
成功:功能(响应){
开关($.trim(response.messageType))
{
案例“@Convert.ToInt32(YourNAmeSpace.Models.MessageType.Valid)”:
警报(“有效”);
打破
案例'@Convert.ToInt32(YourNAmeSpace.Models.MessageType.InvalidEmail)':
警报(“无效用户名称和通行证”);
打破
案例“@Convert.ToInt32(YourNAmeSpace.Models.MessageType.InvalidUerNameAndPass)”:
警报(“无效用户名称和通行证”);
打破
}
}
});
});
});

您使用哪种形式的身份验证?我看不到您发出令牌或cookie。您可以在返回json时设置错误消息。想要你的例子吗?@Tomato32如果能给我一个例子就太好了:)@Marco它的形式直到现在:)使用ajax,然后重定向是没有意义的。ajax的全部目的是保持在同一页面上。只要做一个正常的提交,如果有错误,返回视图来显示它,或者在POST me中进行其他明智的重定向