欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

第四篇:傳遞表單數(shù)據(jù)( MVC案例教程(基于ASP.

系統(tǒng) 1923 0

摘要
????? 本文將完成我們“MVC公告發(fā)布系統(tǒng)”的公告發(fā)布功能,以此展示在ASP.NET MVC中如何傳遞處理表單的數(shù)據(jù)。

前言
????? 通過前幾篇文章,我們已經(jīng)能比較自如的使用ASP.NET MVC來呈現(xiàn)頁面和數(shù)據(jù)了。但是,有一個(gè)大問題沒有解決:如何處理表單數(shù)據(jù)。例如,我們將要實(shí)現(xiàn)的公告發(fā)布功能,用戶肯定是在某個(gè)表單頁面輸入標(biāo)題、正文等內(nèi)容,而后提交,然后表單數(shù)據(jù)要被傳遞到相應(yīng)的地方交由業(yè)務(wù)邏輯組件處理。
????? 在傳統(tǒng)的ASP.NET下,使用的是Model1模式,每個(gè)aspx頁面有一個(gè)同名的aspx.cs文件,當(dāng)提交表單時(shí),默認(rèn)數(shù)據(jù)被提交到這個(gè)同名 aspx.cs文件中某個(gè)方法下處理。但是,在ASP.NET MVC中,這種方法不能用了,因?yàn)槲覀儞Q用了Model2模式,不能再用同名代碼文件來處理aspx的提交請(qǐng)求(但是這不表明同名代碼文件就沒有用了,實(shí)際上,它依然會(huì)被執(zhí)行,但是我們不提倡在里面處理任何邏輯,但是,有時(shí)會(huì)利用它進(jìn)行一些初始化操作。),那么應(yīng)該怎么做呢?不多講,我們以例子說明問題。
????? 下面我們一步一步完成“MVC公告發(fā)布系統(tǒng)”的公告發(fā)布功能,等做完這個(gè)功能,上面的問題就明了了。

先修改一個(gè)錯(cuò)誤...
????? 這里,首先要像大家道歉,因?yàn)樵诘谝黄铮曳噶艘粋€(gè)錯(cuò)誤。就是在公告的實(shí)體類AnnounceInfo中少了一個(gè)屬性。現(xiàn)在,我們?cè)贏nnounceInfo中添加一個(gè)叫Cateogry的屬性,類型為int,它用來指明這個(gè)公告屬于哪個(gè)分類。
????? 對(duì)于這個(gè)錯(cuò)誤,我十分抱歉。

建立輸入信息頁面
????? 下面,正式開始我們的工作。首先,我要建立一個(gè)頁面,用來讓用戶輸入公告信息。而我們知道,在ASP.NET MVC中不能直接請(qǐng)求aspx文件,任何請(qǐng)求都要通過Controller,所以,我們首先在Controllers目錄下建立一個(gè)新的 Controller類,名叫AnnounceController。刪除其中自動(dòng)生成的Index方法,新建一個(gè)名叫Release的Action方法,具體代碼如下。
AnnounceController.cs:

C#代碼 復(fù)制代碼
  1. using ?System; ??
  2. using ?System.Collections.Generic; ??
  3. using ?System.Linq; ??
  4. using ?System.Web; ??
  5. using ?System.Web.Mvc; ??
  6. using ?System.Web.Mvc.Ajax; ??
  7. using ?MVCDemo.Models; ??
  8. using ?MVCDemo.Models.Interfaces; ??
  9. using ?MVCDemo.Models.Entities; ??
  10. ??
  11. namespace ?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. }??
      using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MVCDemo.Models;
using MVCDemo.Models.Interfaces;
using MVCDemo.Models.Entities;

namespace MVCDemo.Controllers
{
    public class AnnounceController : Controller
    {
        public ActionResult Release()
        {
            ICategoryService cServ = ServiceBuilder.BuildCategoryService();
            List<CategoryInfo> categories = cServ.GetAll();
            ViewData["Categories"] = new SelectList(categories, "ID", "Name");
            return View("Release");
        }
    }
}

    
?


????? 這個(gè)就是要呈現(xiàn)表單頁的Action方法,看看它做了什么:它首先取出所有的分類,然后將它們轉(zhuǎn)成SelectList類型存入ViewData,最后呈現(xiàn)Release視圖。
????? 為什么要取出所有分類呢?因?yàn)槲覀冊(cè)诎l(fā)布公告時(shí)希望有個(gè)下拉列表框列出所有公告名稱,讓用戶可以選擇要發(fā)布的公告屬于哪個(gè)分類。而SelectList是 ASP.NET MVC中用于綁定到下拉列表的類型。它有很多重載的構(gòu)造方法,其中我使用的是三個(gè)參數(shù)的,它們分別表示:生成數(shù)據(jù)的枚舉,綁定到value的字段名,綁定到列表名稱的字段名。這里,將把所有分類實(shí)體集合綁定到下拉列表,而ID屬性作為值,Name屬性作為顯示在列表框中的名字。
????? 如果我們不需要下拉列表框來顯示所有分類,那么Release方法只需一行return View("Release");就可以了。

????? Action方法做完了,我們還需要視圖。在Views目錄下建立Announce目錄,再在這個(gè)Announce目錄下建立Release.aspx視圖。代碼如下。
Release.aspx:


C#代碼 復(fù)制代碼
  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公告發(fā)布系統(tǒng)——發(fā)布公告</h1> ??
  14. ????????<%?Html.BeginForm( "DoRelease" , "Announce" ,FormMethod.Post);?%> ??
  15. ????????<dl> ??
  16. ????????????<dt>標(biāo)題:</dt> ??
  17. ????????????<dd><%=?Html.TextBox( "Title" )?%></dd> ??
  18. ????????????<dt>分類:</dt> ??
  19. ????????????<dd><%=?Html.DropDownList( "Category" ,categories)?%></dd> ??
  20. ????????????<dt>內(nèi)容:</dt> ??
  21. ????????????<dd><%=?Html.TextArea( "Content" )?%></dd> ??
  22. ????????</dl> ??
  23. ????????<input?type= "submit" ?value= "發(fā)布" ?/> ??
  24. ????????<%?Html.EndForm();?%> ??
  25. ????</div> ??
  26. </body> ??
  27. </html>??
        <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Release.aspx.cs" Inherits="MVCDemo.Views.Announce.Release" %>
<%@ Import Namespace="MVCDemo.Models.Entities" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <% SelectList categories = ViewData["Categories"] as SelectList; %>
    <div>
        <h1>MVC公告發(fā)布系統(tǒng)——發(fā)布公告</h1>
        <% Html.BeginForm("DoRelease","Announce",FormMethod.Post); %>
        <dl>
            <dt>標(biāo)題:</dt>
            <dd><%= Html.TextBox("Title") %></dd>
            <dt>分類:</dt>
            <dd><%= Html.DropDownList("Category",categories) %></dd>
            <dt>內(nèi)容:</dt>
            <dd><%= Html.TextArea("Content") %></dd>
        </dl>
        <input type="submit" value="發(fā)布" />
        <% Html.EndForm(); %>
    </div>
</body>
</html>
      
?


????? 代碼不復(fù)雜,但是要注意幾個(gè)地方。categories不多說了,這是剛才我們傳遞過來的所有分類組成的列表項(xiàng)。我覺得大家迷惑的可能是那些 Html.***的東西,其實(shí),Html是ViewPage的中的一個(gè)對(duì)象(ViewPage是所有視圖的基類),它主要的左右就是產(chǎn)生各種表單項(xiàng)(先這么認(rèn)為吧,其實(shí)它還有其他功能),例如Html.BeginForm就是說這里開始一個(gè)form標(biāo)簽,而Html.EndForm當(dāng)然是form標(biāo)簽結(jié)束。其他幾個(gè),看名字相信大家也猜出來了。
????? 至于為什么這么做,也不直接使用原始的HTML標(biāo)簽,我先不多說,以后大家做多了自然就理解了,目前大家只要知道,這樣做可以避免一個(gè)url問題以及讓url更靈活就行了。^_^
????? 回到這個(gè)頁面,BeginForm有三個(gè)參數(shù),分別是提交請(qǐng)求的Action名,提交請(qǐng)求的Controller名和請(qǐng)求方式。所以,這個(gè)頁面的意思就是使用post方法請(qǐng)求 http://localhost/Announce/DoRelease 這個(gè)Action來處理我們的請(qǐng)求。
????? 頁面中有三個(gè)輸入表單和一個(gè)提交按鈕。三個(gè)輸入表單分別是:名叫Title的文本框,名叫Content的文本域和名叫Category的下拉列表框。注意下拉列表是怎么綁定的,只要將含有數(shù)據(jù)的SelectList作為第二個(gè)參數(shù)就行了。完成后,頁面是這樣子的:


第四篇:傳遞表單數(shù)據(jù)( MVC案例教程(基于ASP.NET MVC beta))
?
?
?
處理請(qǐng)求
????? 現(xiàn)在我們可以輸入信息了,但是如果你輸入后點(diǎn)提交,你會(huì)發(fā)現(xiàn)產(chǎn)生了經(jīng)典的404錯(cuò)誤。剛才我們說了,表單提交到的Action是Announce下的DoRelease,但是現(xiàn)在沒有這個(gè)Action,當(dāng)然會(huì)404了。下面,我們來建立這個(gè)處理程序。
????? 回到AnnounceController,新建Action方法DoRelease,具體代碼如下。
AnnounceController.cs:
C#代碼 復(fù)制代碼
  1. using ?System; ??
  2. using ?System.Collections.Generic; ??
  3. using ?System.Linq; ??
  4. using ?System.Web; ??
  5. using ?System.Web.Mvc; ??
  6. using ?System.Web.Mvc.Ajax; ??
  7. using ?MVCDemo.Models; ??
  8. using ?MVCDemo.Models.Interfaces; ??
  9. using ?MVCDemo.Models.Entities; ??
  10. ??
  11. namespace ?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. ???????? //??http://www.my400800.cn ??
  23. ???????? 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. ????????????}; ??
  32. ??
  33. ????????????IAnnounceService?aServ?=?ServiceBuilder.BuildAnnounceService(); ??
  34. ????????????aServ.Release(announce); ??
  35. ??
  36. ????????????ViewData[ "Announce" ]?=?announce; ??
  37. ???????????? return ?View( "ReleaseSucceed" ); ??
  38. ????????} ??
  39. ????} ??
  40. }??
        using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MVCDemo.Models;
using MVCDemo.Models.Interfaces;
using MVCDemo.Models.Entities;

namespace MVCDemo.Controllers
{
    public class AnnounceController : Controller
    {
        public ActionResult Release()
        {
            ICategoryService cServ = ServiceBuilder.BuildCategoryService();
            List<CategoryInfo> categories = cServ.GetAll();
            ViewData["Categories"] = new SelectList(categories, "ID", "Name");
            return View("Release");
        }
        //  http://www.my400800.cn
        public ActionResult DoRelease()
        {
            AnnounceInfo announce = new AnnounceInfo()
            {
                ID = 1,
                Title = Request.Form["Title"],
                Category = Int32.Parse(Request.Form["Category"]),
                Content = Request.Form["Content"],
            };

            IAnnounceService aServ = ServiceBuilder.BuildAnnounceService();
            aServ.Release(announce);

            ViewData["Announce"] = announce;
            return View("ReleaseSucceed");
        }
    }
}

      
?

????? 我們看,它首先新建一個(gè)AnnounceInfo類型的實(shí)體類,用來存貯這個(gè)新的公告的信息。注意它是怎么得到表單信息的,對(duì)了,用了 Request.Form["表單名"],這就是獲得表單信息的一種方法,當(dāng)然還有其他方法,但是我推薦這一種。注意,這里的表單名就是我們使用 Html.***方法生成表單時(shí)的名字。
????? OK,下面就是調(diào)用業(yè)務(wù)邏輯組件,完成 400電話 發(fā)布公告功能。
????? 但是這里有個(gè)問題,我們的業(yè)務(wù)邏輯組件是Mock的,也就是說其實(shí)什么都沒做啊。如果是真的業(yè)務(wù)邏輯組件,我們可以去數(shù)據(jù)庫看看有沒有添加公告信息成功,可是這里沒有,我們要怎么證明表單數(shù)據(jù)傳遞過來了呢?于是我想了一個(gè)辦法,有新加了一個(gè)ReleaseSucceed視圖,用來顯示新發(fā)布公告的信息,以此證明我們確實(shí)把表單信息傳過來了。ReleaseSucceed視圖如下:
ReleaseSucceed.aspx:
C#代碼 復(fù)制代碼
  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公告發(fā)布系統(tǒng)——發(fā)布公告成功</h1> ??
  14. ????????<dl> ??
  15. ????????????<dt>ID:</dt> ??
  16. ????????????<dd><%=?announce.ID?%></dd> ??
  17. ????????????<dt>標(biāo)題:</dt> ??
  18. ????????????<dd><%=?announce.Title?%></dd> ??
  19. ????????????<dt>類別ID:</dt> ??
  20. ????????????<dd><%=?announce.Category?%></dd> ??
  21. ????????????<dt>內(nèi)容:</dt> ??
  22. ????????????<dd><%=?announce.Content?%></dd> ??
  23. ????????</dl> ??
  24. ????</div> ??
  25. </body> ??
  26. </html>??
        <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReleaseSucceed.aspx.cs" Inherits="MVCDemo.Views.Announce.ReleaseSucceed" %>
<%@ Import Namespace="MVCDemo.Models.Entities" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <% AnnounceInfo announce = ViewData["Announce"] as AnnounceInfo; %>
    <div>
        <h1>MVC公告發(fā)布系統(tǒng)——發(fā)布公告成功</h1>
        <dl>
            <dt>ID:</dt>
            <dd><%= announce.ID %></dd>
            <dt>標(biāo)題:</dt>
            <dd><%= announce.Title %></dd>
            <dt>類別ID:</dt>
            <dd><%= announce.Category %></dd>
            <dt>內(nèi)容:</dt>
            <dd><%= announce.Content %></dd>
        </dl>
    </div>
</body>
</html>

      
?

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

第四篇:傳遞表單數(shù)據(jù)( MVC案例教程(基于ASP.NET MVC beta))
?
?
????? 看到?jīng)]有,我沒有騙你們,表單數(shù)據(jù)真的傳過來了!^_^|||

小結(jié)
????? 通過這四篇文章,我們已經(jīng)了解了ASP.NET MVC的基本原理,并且已經(jīng)會(huì)呈現(xiàn)數(shù)據(jù)頁面及傳遞表單數(shù)據(jù)處理了。會(huì)了這些,其實(shí)已經(jīng)可以應(yīng)付絕大多數(shù)主要開發(fā)了。從下篇開始,我們接觸一些高級(jí)點(diǎn)的內(nèi)容。下篇將說一下ASP.NET MVC如何與ASP.NET AJAX及JQuery結(jié)合,再后面,會(huì)講到攔截器及與Silverlight結(jié)合的內(nèi)容。

第四篇:傳遞表單數(shù)據(jù)( MVC案例教程(基于ASP.NET MVC beta))


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩在线黄色 | 丁香婷婷综合五月六月 | 男女激情啪啪 | 色欲AV色情国产又爽又色 | 欧美精品成人一区二区三区四区 | 成人片黄网站A片免费 | 国产精品久久久久久免费 | 天天做天天爱天天影视综合 | 亚洲一区二区av | 日韩毛片欧美一级a网站 | 久热香蕉精品视频在线播放 | 成片在线看一区二区草莓 | 奇米影音第四色 | 精品国产午夜福利在线观看 | 国产精品日韩在线观看 | 小优视频污 | 91视频播放 | 欧美一区二 | 国产亚洲欧美一区 | 亚洲一区二区在线视频 | 久久久久久久一区二区 | 欧美乱操| 福利视频1000| 色综合久久综合欧美综合 | 成人黄色免费观看 | 婷婷五月色综合香五月 | 欧美激情a∨在线视频播放 中文字幕亚洲图片 | 国产精品久久久久久久久久 | 中文字幕亚洲一区 | 久久久久久久av | 谍影在线观看电视剧完整版 | 好吊妞gao988在线播放 | 亚洲精品久久久久一区二区 | 69堂永久69tangcom| 亚洲精品美女久久久 | 亚洲成人久久久 | 色花堂国产精品第一页 | 狠狠色噜噜狠狠狠狠97影音先锋 | 久久久久久久一区二区三区 | 91精品最新国内在线播放 | 91短视频在线高清hd |