Как передать значение между двумя представлениями (общий контроллер) в MVC

Ниже приведена структура соответствующего раздела моего запроса:

  AccountController
  {

 [HTTPGET]
 getDetail(int ID)
 {    
  ViewBag.classID = ID;
 }
 }

cshtml razor "view1"
 --------------
   //calling to getDetail(id) and it set the ViewBag.classID.

cshtml razor "view2"
 --------------
  <script type="text/javascript">
$(window).load(function () {
        alert('@ViewBag.classID);   //PROBLEM: gives me empty value everytime even though set from another view.
});

Контроллер является общим для обоих видов.

Проблема: view1 обратился к контроллеру и установил CLASSID в viewbag. Теперь, при событии загрузки jquery view2, я хочу получить доступ к значению viewBag, но оно не доступно. Мне нужно сделать Cshtml на основе значения существует на viewbag.classID.

Пожалуйста, предложите мне, если какой-либо альтернативный или лучший appraoch или как исправить это.

благодарю вас

1 ответ

Вместо использования ViewBag (Viewbag сохраняется только до визуализации представления, а после визуализации представления ViewBag данные теряются), вы можете вернуть идентификатор класса в виде JSON и использовать его в своем JQuery, как показано ниже. Допустим, у вас есть следующие действия контроллера -

    [HttpGet]
    public ActionResult getDetail(int id)
    {
        return Json(id + " New", JsonRequestBehavior.AllowGet);
    }

Затем вы можете вызвать это действие с помощью JQuery следующим образом -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>

<script>
    function submitForm() {
        jQuery.ajax({
            type: "GET",
            url: "@Url.Action("getDetail")" + "/" + "123", // Get your 123 dynmically here if you want
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert(data);
            },
            failure: function (errMsg) {
                alert(errMsg);
            }
        });
    }
</script>

<input type="button" value="Click" onclick="submitForm()" />

И когда вы нажимаете кнопку, вы получаете предупреждение с данными, возвращенными Json. Вы можете вызывать этот JQuery AJAX GET в любом случае, например, при загрузке документа и т. Д.

Выход будет -

введите описание изображения здесь

НОТА:

Если вы не хотите следовать вышеописанному подходу, вы можете использовать переменную Session для хранения и извлечения информации.

РЕДАКТИРОВАТЬ Используйте TempData - который помогает поддерживать данные при переходе с одного контроллера на другой контроллер или с одного действия на другое действие.

Другие вопросы по тегам