簡體   English   中英

如何將數據從Action傳遞到mvc4中的Ajax成功函數?

[英]How to pass data from Action to Ajax success function in mvc4?

您好,我想成功登錄后再調用我的成功函數,否則調用錯誤函數

在這里查看代碼

<div class="container">
<div class="login-container">
    <div class="avatar"><img src="@Url.Content("~/Content/images/download.jpeg")" style="max-width:95%;" /></div>
    <div class="form-box">
        @using (Html.BeginForm())
        {
            <div class="input-group">
                <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
                @Html.TextBoxFor(m => m.UserId, new { @class = "form-control", @id="userid", @placeholder = "Username", @required = "required", @maxlength = "20" })
            </div>
            <div class="input-group">
                <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
                @Html.PasswordFor(m => m.Password, new { @class = "form-control", @id = "userpass", @placeholder = "Password", @required = "required", @maxlength = "20" })
            </div>
            <button class="btn btn-info btn-block login" type="submit" id="login-btn"><i class="glyphicon glyphicon-log-in"></i>&nbsp;&nbsp;&nbsp;Login</button>
        }
    </div>
</div>

這里的ajax代碼:

<script>
$(document).ready(function () {
    $('#login-btn').click(function () {
        var dataObject = {
            Id: $("#userid").val(),
            Password: $("#userpass").val()
        };
        $.ajax({
            url: '@Url.Action("Login","Account")',
            type: "POST",
            data: dataObject,
            dataType: "json",
            success: function (data) {

                if (data.toString() == "login") {
                    toastr['success']("Login Successfully");
                }
                else if (data.toString() == "error") {
                    toastr['error']("Id or Password is incorrect");
                }
            },
            error: function () {
                toastr['error']("Hello");
            }
        });

    });
});

控制器代碼在這里:

[HttpPost]
    public ActionResult Login(LoginMaster model)
    {
        string message = "";
        if (ModelState.IsValid)
        {
            try
            {
                var user = from emp in db.LoginMasters
                           where emp.UserId == model.UserId && emp.Password == model.Password
                           select emp;

                var rol = user.FirstOrDefault();
                if (rol != null)
                {
                    var realrol = rol.Role;
                    if (realrol == "admin")
                    {
                        message = "login";
                        return RedirectToAction("Index", "Home");
                    }
                    else if (realrol == "user")
                    {
                        Session["userid"] = rol.UserId;
                        message = "login";
                        return RedirectToAction("User", "Home");
                    }
                }
                else
                {
                    message = "error";
                }
            }
            catch (Exception ex)
            {
                ViewBag.cath = ex.Message;
            }

        }
        else
        {
            message = "error";
        }
        if (Request.IsAjaxRequest())
        {
            return new JsonResult { Data = message, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        }

        return View();

我想當我們成功登錄的時候叫這個

toastr['success']("Login Successfully");

當登錄失敗時

toastr['error']("Id or Password is incorrect");

請解決這個問題。 提前致謝!

假設您的控制器代碼命中了返回json的部分,那么您可以通過.Data訪問它:

success: function (data) {

            if (data.Data == "login") {
                toastr['success']("Login Successfully");
            }
            else if (data.Data == "error") {
                toastr['error']("Id or Password is incorrect");
            }
        }

您可以在此處的代碼中設置.Data屬性:

new JsonResult { Data = message ...

成功調用的問題在於它正在測試整個json對象, 而不是 .Data屬性。

data.toString() == "login"

不,先生,我們的問題是我們的行動,我們可以放置未按順序運行的生命值,這一點首先執行

if (Request.IsAjaxRequest())
    {
        return new JsonResult { Data = message, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

然后執行此部分

try
        {
            var user = from emp in db.LoginMasters
                       where emp.UserId == model.UserId && emp.Password == model.Password
                       select emp;

            var rol = user.FirstOrDefault();
            if (rol != null)
            {
                var realrol = rol.Role;
                if (realrol == "admin")
                {
                    message = "login";
                    return RedirectToAction("Index", "Home");
                }
                else if (realrol == "user")
                {
                    Session["userid"] = rol.UserId;
                    message = "login";
                    return RedirectToAction("User", "Home");
                }
            }
            else
            {
                message = "error";
            }
        }
        catch (Exception ex)
        {
            ViewBag.cath = ex.Message;
        }

所以問題是我們無法在message變量中設置正確的字符串,因此請首先在js小提琴中制作一個示例,然后提供我的鏈接

在腳本中使用此代碼后。

var dataObject = {
            Id: $("#userid").val(),
            Password: $("#userpass").val()
        };

如果您的LoginMaster模型包含IdPassword它將顯示數據。 如果您具有UserIdPassword則必須在腳本中更改代碼,如下所示。

 var dataObject = {
                UserId: $("#userid").val(),
                Password: $("#userpass").val()
            };

簡而言之,將Id替換為UserId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM