ASP.NET MVC controller 之間傳JS值


在ASP.NET MVC中有東西叫TempData,它的類型是TempDataDictionary,它與ViewData以及ViewBag的不同之處在於

它的內部是使用session來保存信息的,可以理解為暫存的意思。雖然是通過session在保存信息,但它的生命周期是“一次網頁的請求”。

利用這一點,我們可以用它在做MVC 中action之間的傳值。以下是我傳值的一點經驗,高手請忽略,呵呵。

假如我們有一張學生管理的頁面,其中有學生添加功能,以及學生展示列表。我們是通過一個Action來展示所有信息的,就像是web form一樣

那么在controller中會有這樣一個action

 [HttpGet]
        public ActionResult Students()
        {
            ViewBag.title = "Add Student Page";
            ViewBag.jsMessage = TempData["jsMessage"] == null ? "" : TempData["jsMessage"].ToString();//判斷並給ViewBag賦值
            return View(StudentsPage_Load());
        }

  要添加學生我們就必須有一個Add action如下:

 [HttpPost]
        public ActionResult Add(Students student) 
        {
            if (ModelState.IsValid)
            {
                StudentsBLL bll = new StudentsBLL();
                bll.Add(student);
                TempData["jsMessage"] = "alert('success');";//利用TempData暫存數據
            }
            return RedirectToAction("Students");
        }

  請注意上述代碼中的注釋部分,它是說添加成功之后,返回原有的頁面。也就是說這個Add  action並沒有對應的view。

     那么在添加學生成功之后要在原有的頁面中用JS彈出一個添加成功的對話框。可以在Students的View中這樣寫

 <script type="text/javascript">
  @Html.Raw(@ViewBag.jsMessage)
 </script>

  其中@Html.Raw是表示不對輸出進行轉義。這里有個地方要注意。如果直接在cshtml文件中寫

TempData["jsMessage"]則會輸出轉義后的字符。但如果這樣寫的話:
@Html.Raw(TempData["jsMessage"])
頁面的編譯將會報錯。所以必須在Students這個Action中加入
ViewBag.jsMessage作為數據的承接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM