ASP.NET MVC 5 學習教程:控制器傳遞數據給視圖


起飛網 ASP.NET MVC 5 學習教程目錄:

在討論數據庫和模型之前,讓我們先說說容控制器傳遞數據給視圖。控制器類在響應傳入的請求時被調用,控制器類是你寫代碼處理瀏覽器請求、從數據庫中檢索數據、並最終決定發送什么類型的響應給瀏覽器。視圖模板被控制器用來生成和格式化HTML響應給瀏覽器。

控制器的責任是為視圖模板提供必須的數據或對象,用來繪制HTML響應瀏覽器。一個最佳實踐是:視圖模板從來不參與業務邏輯,或直接與數據庫交互。相反的,視圖模板僅與控制器提供的數據一起工作。保持這種“關注點分離(separation of concerns)”有助於保持代碼的整潔,可測試性和更容易維護。

目前,HelloWorldController 類中的 Welcome 方法需要兩個參數:namenumTimes,然后直接與將值輸出給瀏覽器。讓我們修改控制器,使用視圖來替換直接相應string字符串。視圖模板會生成一個動態響應,這意味着你需要通過控制器傳遞一些數據用來生成響應。要做到這些,你需要通過在控制器中將數據(參數)放到ViewBag對象中,視圖可以訪問ViewBag對象。

回到 HelloWorldController.cs  文件中,修改Welcome方法,在ViewBag對象中添加一個Message和NumTimes值。ViewBag是dynamic 類型的對象,你可以為它添加任何你想要的數據,ViewBag對象在你添加數據之前,不具有任何屬性。ASP.NET MVC 模型綁定系統從地址參數中自動映射命名的參數(namenumTimes)到方法中。完整的HelloWorldController.cs文件如下:

代碼清單1:HelloWorldController.cs文件

using System.Web;
using System.Web.Mvc;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Welcome(string name, int numTimes = 1)
        {
            ViewBag.Message = "Hello " + name;
            ViewBag.NumTimes = numTimes;

            return View();
        }
    }
}

現在ViewBag對象已經包含了數據,它會被自動傳遞給視圖。

接下來,你需要一個Welcome視圖模板。在生成菜單中,選擇生成解決方案(或使用快捷鍵 CTRL+SHIFT+B)確定項目已經編譯了。

Views\HelloWorld 文件夾右鍵,選擇“添加”>“支架”:

圖1:添加視圖菜單

image

在添加支架對話框中,選擇“MVC 5 View - Empty without model”。

圖2:添加支架對話框

image

在Add View對話框中,將視圖命名為Welcome

圖3:Add View對話框

image

文件MvcMovie\Views\HelloWorld\Welcome.cshtml  已經創建好了。

在文件Welcome.cshtml  的<h2>元素下添加如下的代碼,完整的代碼如下:

@{
    ViewBag.Title = "Welcome";
}

<h2>Welcome</h2>

<ul>
    @for (int i = 0; i < ViewBag.NumTimes; i++)
    {
        <li>@ViewBag.Message</li>
    }
</ul>

運行應用程序,在瀏覽器中查看如下地址:

http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4

現在數據從URL取出來,通過模型綁定傳遞給控制器,控制器將數據封裝在ViewBag對象中,傳遞給視圖,然后視圖將數據以HTML的方式呈現給用戶。

圖4:Welcome視圖

image

在上面的例子中,我們使用ViewBag對象將數據從控制器傳遞給視圖。在家下來的章節中,我們會使用視圖模型來傳遞數據。使用視圖模型傳遞數據比用ViewBag要好得多。

這也是模型“M”的一種,但並沒有使用數據庫。我們接下來要學習的是創建一個數據庫,創建一個真正意義的視圖模型。

本文轉自起飛網,原文地址:http://www.qeefee.com/mvc/mvc-5-passing-data-from-the-controller-to-the-view


免責聲明!

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



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