Как передать значение между двумя представлениями (общий контроллер) в 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 - который помогает поддерживать данные при переходе с одного контроллера на другой контроллер или с одного действия на другое действие.