如何在MVC中的两个视图(公共控制器)之间传递值

时间:2014-02-18 07:52:42

标签: asp.net-mvc asp.net-mvc-4 razorengine

以下是我的查询的相关部分的结构:

  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。 现在,在view2的jquery load事件中,我想访问viewBag值,但它不可用。 我需要根据viewbag.classID上存在的值来渲染cshtml。

如果有任何替代或最佳评价,或者如何纠正,请建议我。

谢谢你

1 个答案:

答案 0 :(得分:1)

而不是使用ViewBag(Viewbag仅在呈现视图之前一直存在,并且一旦View呈现ViewBag数据丢失),您可以将类ID作为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,例如onload of document等。

输出将是 -

enter image description here

注意:

如果您不想遵循上述方法,则可以使用Session variable来存储和检索信息。

修改 使用TempData - 当您从一个控制器移动到另一个控制器或从一个操作移动到其他操作时,这有助于维护数据。