0

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

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

如果有任何替代或最佳方法或如何纠正此问题,请向我提出建议。

谢谢你

4

1 回答 1

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,例如加载文档等。

输出将是 -

在此处输入图像描述

笔记:

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

编辑 使用TempData - 当您从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,它有助于维护数据。

于 2014-02-18T08:13:51.970 回答