如何在AJAX成功中获取viewbag的值?

时间:2019-03-02 10:22:33

标签: c# jquery ajax asp.net-mvc-5

这里,我使用"Variable 2"方法来编辑客户详细信息。

在这种方法中,我尝试设置EditMyProfile并返回ViewBag.msg = 1,设置return PartialView("MyProfile", getCusomerDetail);并返回ViewBag.msg = 0;并使用该return PartialView("EditMyProfile", customer);值要在AJAX成功上设置条件是否显示成功消息。

现在的问题是,即使ViewBag.msgViewBag.msg视图中有价值,但EditMyProfile却给var message = '@ViewBag.msg'带来了AJAX成功。

任何帮助我的代码会很有帮助
谢谢

下面是我的AJAX

var message = ""


下面是我的

<script>
$(document).ready(function () {
    $("#EditMyProfileCreate").submit(function (ev) {
        debugger;
        ev.stopImmediatePropagation();
        var Action = $(this).attr('action');
        var formData = new FormData($(this)[0]);
        $.ajax({
            url: Action,
            type: 'POST',
            data: formData,
            async: false,
            success: function (data) {
                debugger
                var message = '@ViewBag.msg'; // Here the var message = "" even though @ViewBag.msg' has value
                if (message == "1") {
                    swal("Congratulations!", "Chages saved successfully", "success");
                    $("section#myAccountMainDiv").html(data);
                }
                else {
                    $("section#myAccountMainDiv").html(data);
                }                   
            },
            cache: false,
            contentType: false,
            processData: false
        });
        return false;
    });
})

2 个答案:

答案 0 :(得分:0)

将ViewBag值传递给您的部分中的隐藏输入。然后在DOM准备就绪时获取它。

在您的部分视图中:

<input type="Hidden" value="@ViewBag.msg" id="message" />

然后在视图中以及ajax的成功功能中添加以下行:

success: function (data) {
    $("section#myAccountMainDiv").html(data);
    $(document).ready(function() {
        var msg = $("#message").val();
        if (msg == "1") {
            swal("Congratulations!", "Chages saved successfully", "success");
        } else {
            // etc
        }
    });
}

答案 1 :(得分:0)

要使用javascript访问ViewBag词典,您的JavaScript代码块必须位于cshtml文件上,而不位于外部javascript文件中。

在Controlller中

public ActionResult Index()
    {
        ViewBag.Data = "haha";
        return View();
    }

在cshtml文件中

<script>
        $(document).ready(function () {                   
            alert('@ViewBag.Data');
        });
    </script>

在通过Ajax调用来调用控制器时,需要在部分视图内将数据作为变量返回。我的建议是在局部视图的cshtml文件中创建一个隐藏字段,并在编译时将ViewBag属性的值赋给该值。然后在成功函数内部获取隐藏字段的值并进行比较。