前言
通過前幾篇文章,我們已經能比較自如的使用ASP.NET MVC來呈現頁面和數據了。但是,有一個大問題沒有解決:如何處理表單 數據。例如,我們將要實現的公告發布功能,用戶肯定是在某個表單頁面輸入標題、正文等內容,而後提交,然後表單數據要被傳遞到相應的 地方交由業務邏輯組件處理。
在傳統的ASP.NET下,使用的是Model1模式,每個aspx頁面有一個同名的aspx.cs文件,當提交表單時,默 認數據被提交到這個同名aspx.cs文件中某個方法下處理。但是,在ASP.NET MVC中,這種方法不能用了,因為我們換用了Model2模式,不能再 用同名代碼文件來處理aspx的提交請求(但是這不表明同名代碼文件就沒有用了,實際上,它依然會被執行,但是我們不提倡在裡面處理任何 邏輯,但是,有時會利用它進行一些初始化操作。),那麼應該怎麼做呢?不多講,我們以例子說明問題。
下面我們一步一步完成 “MVC公告發布系統”的公告發布功能,等做完這個功能,上面的問題就明了了。
先修改一個錯誤...
這裡,首先要 像大家道歉,因為在第一篇裡,我犯了一個錯誤。就是在公告的實體類AnnounceInfo中少了一個屬性。現在,我們在AnnounceInfo中添加一個 叫Cateogry的屬性,類型為int,它用來指明這個公告屬於哪個分類。
對於這個錯誤,我十分抱歉。
建立輸入信息頁面
下面,正式開始我們的工作。首先,我要建立一個頁面,用來讓用戶輸入公告信息。而我們知道,在ASP.NET MVC中不能直接請求aspx文件,任 何請求都要通過Controller,所以,我們首先在Controllers目錄下建立一個新的Controller類,名叫AnnounceController。刪除其中自動生成 的Index方法,新建一個名叫Release的Action方法,具體代碼如下。
AnnounceController.cs:
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Web.Mvc;
6using System.Web.Mvc.Ajax;
7using MVCDemo.Models;
8using MVCDemo.Models.Interfaces;
9using MVCDemo.Models.Entities;
10
11namespace MVCDemo.Controllers
12{
13 public class AnnounceController : Controller
14 {
15 public ActionResult Release()
16 {
17 ICategoryService cServ = ServiceBuilder.BuildCategoryService();
18 List<CategoryInfo> categories = cServ.GetAll();
19 ViewData["Categories"] = new SelectList(categories, "ID", "Name");
20 return View("Release");
21 }
22 }
23}
這個就是要呈現表單頁的Action方 法,看看它做了什麼:它首先取出所有的分類,然後將它們轉成SelectList類型存入ViewData,最後呈現Release視圖。
為什麼要取出 所有分類呢?因為我們在發布公告時希望有個下拉列表框列出所有公告名稱,讓用戶可以選擇要發布的公告屬於哪個分類。而SelectList是 ASP.NET MVC中用於綁定到下拉列表的類型。它有很多重載的構造方法,其中我使用的是三個參數的,它們分別表示:生成數據的枚舉,綁定到 value的字段名,綁定到列表名稱的字段名。這裡,將把所有分類實體集合綁定到下拉列表,而ID屬性作為值,Name屬性作為顯示在列表框中的 名字。
如果我們不需要下拉列表框來顯示所有分類,那麼Release方法只需一行return View("Release");就可以了。