Как получить доступ к значению viewbag в AJAX? - PullRequest
0 голосов
/ 02 марта 2019

Здесь я EditMyProfile метод, который используется для редактирования деталей клиента.

В этом методе я пытаюсь установить ViewBag.msg = 1 и вернуть return PartialView("MyProfile", getCusomerDetail);, установить ViewBag.msg = 0; и вернуть return PartialView("EditMyProfile", customer); и, используя это значение ViewBag.msg, хочу поставить условие на успех AJAX, показывать ли сообщение об успехеили нет.

Теперь проблема в том, что даже если ViewBag.msg имеет значение в представлении EditMyProfile, var message = '@ViewBag.msg' дает var message = "" в успешном AJAX.

Любая помощь с моим кодом будеточень помогите
Спасибо

Ниже мой AJAX

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


Ниже мой

 [HttpPost]
    public ActionResult EditMyProfile(CustomerVM customer)
    {
        if (ModelState.IsValid)
        {
            using (emedicineEntities _db = new emedicineEntities())
            {
                var getCustomer = _db.Customers.Where(x => x.CustomerId == customer.CustomerId).FirstOrDefault();
                getCustomer.CustomerName = customer.CustomerName;
                getCustomer.CustomerPhoneNumber = customer.CustomerPhoneNumber;
                getCustomer.CustomerEmail = customer.CustomerEmail;
                getCustomer.CustomerAddress = customer.CustomerAddress;
                getCustomer.ConfirmPassword = getCustomer.PasswordHash;                   
                _db.Entry(getCustomer).State = EntityState.Modified;
                _db.SaveChanges();

                ViewBag.msg = 1; // here ViewBag.msg is set 1 on successfull edit 

                var getId = Global.CustomerId;
                var getCusomerDetail = _db.Customers.Where(x => x.CustomerId == getId).FirstOrDefault();
                return PartialView("MyProfile", getCusomerDetail);
            }
        }
        else
        {
            ViewBag.msg = 0; // here ViewBag.msg is set 0 when model is invalid 

            return PartialView("EditMyProfile", customer);
        }
    }

1 Ответ

0 голосов
/ 02 марта 2019

Чтобы получить доступ к словарю ViewBag в javascript, ваш блок кода Javascript должен находиться в файле cshtml, а не во внешнем файле javascript.

В контроллере

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

В файле cshtml

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

Поскольку вы вызываете свой контроллер с помощью Ajax-вызова, вам необходимо вернуть данные в виде переменной внутри вашего частичного представления.Я хотел бы предложить создать скрытое поле внутри cshtml-файла вашего частичного представления и присвоить ему значение свойства ViewBag во время компиляции.Затем внутри функции успеха получите значение скрытого поля и сравните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...