2014-02-18 50 views
0

兩個視圖(通用控制器)之間傳遞價值下面是我查詢的相關部分的結構:如何在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。 現在,在view2的jquery加載事件中,我想訪問viewBag值,但它不可用。 我需要根據viewbag.classID上的值呈現cshtml。

請給我建議,如果有任何替代或最好的appraoch或如何糾正這一點。

感謝您

+0

您是否嘗試過使用TempData [「classID」]? – free4ride

回答

1

而不是使用ViewBag的(Viewbag只持續,直到視圖渲染,而一旦瀏覽被渲染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事件等

輸出會 -

enter image description here

注:

如果您不想遵守上述方法,則可以使用Session variable來存儲和檢索信息。

編輯 使用TempData - 這有助於當你從一個控制器移動到另一個控制器或從一個動作到另一個動作,以保持數據。

+0

我想從一個視圖和另一個視圖設置值。 View1調用控制器的'GetDetail()'。現在,View2應該能夠訪問由View1設置的值。它如何實現。 – dsi

+0

@Dhaval使用TempData(檢查我編輯的答案) – ramiramilu