1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京北大青鳥

    全國咨詢電話:15195455103

    三分鐘了解北大青鳥
    當前位置:南京北大青鳥 > 新聞動態 > 常見問答

    ASP.NET 傳遞表單數據

    來源:南京北大青鳥張府園校區? ? ? 作者:IT教育 ? ??

        通過前幾篇文章,我們已經能比較自如的使用ASP.NET MVC來呈現頁面和數據了。但是,有一個大問題沒有解決:如何處理表單數據。例如,我們將要實現的公告發布功能,用戶肯定是

    前言

        通過前幾篇文章,我們已經能比較自如的使用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;1011namespace MVCDemo.Controllers12{13    public class AnnounceController : Controller14    {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");就可以了。      Action方法做完了,我們還需要視圖。在Views目錄下建立Announce目錄,再在這個Announce目錄下建立Release.aspx視圖。代碼如下。Release.aspx:

     1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Release.aspx.cs" Inherits="MVCDemo.Views.Announce.Release" %> 2<%@ Import Namespace="MVCDemo.Models.Entities" %> 3 4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 5 6<html xmlns="http://www.w3.org/1999/xhtml" > 7<head runat="server"> 8    <title></title> 9</head>10<body>11    <% SelectList categories = ViewData["Categories"] as SelectList; %>12    <div>13        <h1>MVC公告發布系統——發布公告</h1>14        <% Html.BeginForm("DoRelease","Announce",FormMethod.Post); %>15        <dl>16            <dt>標題:</dt>17            <dd><%= Html.TextBox("Title") %></dd>18            <dt>分類:</dt>19            <dd><%= Html.DropDownList("Category",categories) %></dd>20            <dt>內容:</dt>21            <dd><%= Html.TextArea("Content") %></dd>22        </dl>23        <input type="submit" value="發布" />24        <% Html.EndForm(); %>25    </div>26</body>27</html>

         代碼不復雜,但是要注意幾個地方。categories不多說了,這是剛才我們傳遞過來的所有分類組成的列表項。我覺得大家迷惑的可能是那些Html.***的東西,其實,Html是ViewPage的中的一個對象(ViewPage是所有視圖的基類),它主要的左右就是產生各種表單項(先這么認為吧,其實它還有其他功能),例如Html.BeginForm就是說這里開始一個form標簽,而Html.EndForm當然是form標簽結束。其他幾個,看名字相信大家也猜出來了。

         至于為什么這么做,也不直接使用原始的HTML標簽,我先不多說,以后大家做多了自然就理解了,目前大家只要知道,這樣做可以避免一個url問題以及讓url更靈活就行了。^_^      回到這個頁面,BeginForm有三個參數,分別是提交請求的Action名,提交請求的Controller名和請求方式。所以,這個頁面的意思就是使用post方法請求http://localhost/Announce/DoRelease這個Action來處理我們的請求。      頁面中有三個輸入表單和一個提交按鈕。三個輸入表單分別是:名叫Title的文本框,名叫Content的文本域和名叫Category的下拉列表框。注意下拉列表是怎么綁定的,只要將含有數據的SelectList作為第二個參數就行了。完成后,頁面是這樣子的:
     

    北大青鳥軟件學校職業教育

     
     
    處理請求 

         現在我們可以輸入信息了,但是如果你輸入后點提交,你會發現產生了經典的404錯誤。剛才我們說了,表單提交到的Action是Announce下的DoRelease,但是現在沒有這個Action,當然會404了。下面,我們來建立這個處理程序。      回到AnnounceController,新建Action方法DoRelease,具體代碼如下。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;1011namespace MVCDemo.Controllers12{13    public class AnnounceController : Controller14    {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        }2223        public ActionResult DoRelease()24        {25            AnnounceInfo announce = new AnnounceInfo()26            {27                ID = 1,28                Title = Request.Form["Title"],29                Category = Int32.Parse(Request.Form["Category"]),30                Content = Request.Form["Content"],31            };3233            IAnnounceService aServ = ServiceBuilder.BuildAnnounceService();34            aServ.Release(announce);3536            ViewData["Announce"] = announce;37            return View("ReleaseSucceed");38        }39    }40}

        我們看,它首先新建一個AnnounceInfo類型的實體類,用來存貯這個新的公告的信息。注意它是怎么得到表單信息的,對了,用了Request.Form["表單名"],這就是獲得表單信息的一種方法,當然還有其他方法,但是我推薦這一種。注意,這里的表單名就是我們使用Html.***方法生成表單時的名字。      OK,下面就是調用業務邏輯組件,完成發布公告功能。

        但是這里有個問題,我們的業務邏輯組件是Mock的,也就是說其實什么都沒做啊。如果是真的業務邏輯組件,我們可以去數據庫看看有沒有添加公告信息成功,可是這里沒有,我們要怎么證明表單數據傳遞過來了呢?于是我想了一個辦法,有新加了一個ReleaseSucceed視圖,用來顯示新發布公告的信息,以此證明我們確實把表單信息傳過來了。ReleaseSucceed視圖如下:ReleaseSucceed.aspx:

     1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReleaseSucceed.aspx.cs" Inherits="MVCDemo.Views.Announce.ReleaseSucceed" %> 2<%@ Import Namespace="MVCDemo.Models.Entities" %> 3 4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 5 6<html xmlns="http://www.w3.org/1999/xhtml" > 7<head runat="server"> 8    <title></title> 9</head>10<body>11    <% AnnounceInfo announce = ViewData["Announce"] as AnnounceInfo; %>12    <div>13        <h1>MVC公告發布系統——發布公告成功</h1>14        <dl>15            <dt>ID:</dt>16            <dd><%= announce.ID %></dd>17            <dt>標題:</dt>18            <dd><%= announce.Title %></dd>19            <dt>類別ID:</dt>20            <dd><%= announce.Category %></dd>21            <dt>內容:</dt>22            <dd><%= announce.Content %></dd>23        </dl>24    </div>25</body>26</html>

          這些代碼就不用我過多解釋了。下面,我們輸入一些信息,提交看看:
     

    北大青鳥軟件學校職業教育

     
          看到沒有,我沒有騙你們,表單數據真的傳過來了!^_^|||小結      通過這四篇文章,我們已經了解了ASP.NET MVC的基本原理,并且已經會呈現數據頁面及傳遞表單數據處理了。會了這些,其實已經可以應付絕大多數主要開發了。從下篇開始,我們接觸一些高級點的內容。下篇將說一下ASP.NET MVC如何與ASP.NET AJAX及JQuery結合,再后面,會講到攔截器及與Silverlight結合的內容。


    分享到:

    相關閱讀:

    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 亚洲精品第一国产综合精品| 色偷偷91久久综合噜噜噜| 国产亚洲综合成人91精品| 日日狠狠久久偷偷色综合免费 | 亚洲综合激情另类专区| 国产色丁香久久综合| 天天欲色成人综合网站| 亚洲 综合 国产 欧洲 丝袜| 一本色道久久88亚洲综合| 亚洲综合无码AV一区二区| 狠狠色丁香久久综合五月| 久久综合综合久久| 天天欲色成人综合网站| 狠狠色丁香婷婷综合久久来| 亚洲综合图片小说区热久久| 狠狠色丁香久久婷婷综合图片| 国产综合成人色产三级高清在线精品发布| 青青热久久久久综合精品| 色综合色天天久久婷婷基地| 国产激情电影综合在线看| 亚洲人成伊人成综合网久久| 伊人色综合久久大香| 色婷婷狠狠久久综合五月| 久久一本色系列综合色| 久久综合视频网站| 色狠狠色狠狠综合天天| 亚洲国产成人久久综合碰碰动漫3d| 婷婷综合激六月情网| 亚洲AV综合色区无码另类小说| 婷婷综合激六月情网| 色狠狠成人综合色| 色综久久天天综合绕视看| 久久综合亚洲色HEZYO社区| 青青热久久久久综合精品| 一本久久a久久精品综合香蕉| 亚洲AV综合色区无码一区| 久久综合久久鬼色| 久久综合精品国产一区二区三区 | 91精品国产综合久久久久久| 色综合久久综合网| 激情综合亚洲色婷婷五月|