日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC整合Ajax

發布時間:2024/4/17 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC整合Ajax 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第五篇:MVC整合Ajax 摘要
????? 本文將從完成“輸入數據驗證”這個功能出發,逐漸展開ASP.NET MVC與Ajax結合的方法。首先,本文將使用ASP.NET MVC提供的同步方式完成數據驗證。而后,將分別結合ASP.NET AJAX和JQuery將這個功能重構成異步形式。

數據驗證
????? 在上一篇文章中,我們完成了發布公告的功能。但是從健壯性角度看,這個功能并不完善,因為一般情況下,我們輸入的數據要符合一定的約束條件,例如,在我們的例子中,我們至少不能將空字符串作為標題或內容吧。下面,我們來為程序加入數據驗證功能,
????? ASP.NET MVC中提供了良好的數據驗證實現支持,下面我們來看實現過程。首先,我們要修改一下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????????????<dd><%=?Html.ValidationMessage("TitleValidator")?%></dd>
19????????????<dt>分類:</dt>
20????????????<dd><%=?Html.DropDownList("Category",categories)?%></dd>
21????????????<dd></dd>
22????????????<dt>內容:</dt>
23????????????<dd><%=?Html.TextArea("Content")?%></dd>
24????????????<dd><%=?Html.ValidationMessage("ContentValidator")?%></dd>
25????????</dl>
26????????<input?type="submit"?value="發布"?/>
27????????<%?Html.EndForm();?%>
28????</div>
29</body>
30</html>
????? 可以看到,并沒有什么大的變動,只是多了兩個Html.ValidationMessage方法。可以這樣理解,這個方法相當于產生一個span標簽,而這個span就是要顯示錯誤信息的地方。這個方法接收一個參數,用來指明其在Controller中的名字。如果你對這個迷惑,不要緊,接下來看完Controller的代碼,你就什么都清楚了。
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????????public?ActionResult?DoRelease()
24????????{
25????????????if?(String.IsNullOrEmpty(Request.Form["Title"])?||?String.IsNullOrEmpty(Request.Form["Content"]))
26????????????{
27????????????????if?(String.IsNullOrEmpty(Request.Form["Title"]))
28????????????????{
29????????????????????ViewData.ModelState.AddModelError("TitleValidator","公告標題不能為空!");
30????????????????}

31????????????????if?(String.IsNullOrEmpty(Request.Form["Content"]))
32????????????????{
33????????????????????ViewData.ModelState.AddModelError("ContentValidator",?"公告內容不能為空!");
34????????????????}

35
36????????????????return?Release();
37????????????}

38
39????????????AnnounceInfo?announce?=?new?AnnounceInfo()
40????????????{
41????????????????ID?=?1,
42????????????????Title?=?Request.Form["Title"],
43????????????????Category?=?Int32.Parse(Request.Form["Category"]),
44????????????????Content?=?Request.Form["Content"],
45????????????}
;
46
47????????????IAnnounceService?aServ?=?ServiceBuilder.BuildAnnounceService();
48????????????aServ.Release(announce);
49
50????????????ViewData["Announce"]?=?announce;
51????????????return?View("ReleaseSucceed");
52????????}

53????}

54}

????? 可以看到,我們的DoRelease這個Action方法多了不少東西。我們看多了什么:當從表單傳遞過來的標題或內容為空時,我們做了一定處理。注意,這個ViewData.ModelState.AddModelError方法,它就是往我們剛才說的由Html.ValidationMessage生成的span里加入錯誤信息的方法,它可以有兩個參數,第一個指明哪個span,這個參數Html.ValidationMessage中的參數是對應的。第二個參數就是要顯示的信息。
????? 相信結合視圖和控制器,已經很好理解了。最后,如果標題或內容有空值的話,我們不再調用業務邏輯組件處理了,而是調用了Release這個Action。為什么我們不用Redirect呢?因為我們要保持ViewData中的數據,剛才我們的錯誤信息可都放在里面的,而使用了Redirect,ViewData的信息就傳不過去了。
????? 現在,我們再來發布公告。我們故意什么都不填,提交,看結果:
沒有問題,我們的程序成功對標題和內容進行了完整性檢測(這里就是均不能為空),在驗證不通過時,返回了發布公告視圖并正確顯示了錯誤提示信息。
????? 也許你有一個疑問,為什么第一次請求Release視圖時沒有顯示任何錯誤信息呢?因為那時ViewData中的ModelError是空的。而Html.ValidationMessage生成的標簽會自動尋找ModelError中同名的錯誤信息,找不到,當然是空的了。而在提交空信息時,DoRelease這個Action為ViewData的ModelError添加了內容,于是當再次返回Release視圖時,相應信息就顯示在我們指定的位置了。

使用ASP.NET AJAX實現客戶端數據驗證
????? 上面的代碼運行起來沒問題,也達到了我們的要求。但是驗證標題內容是否為空這種行為在客戶端應該就可以完成。當然,為了放置惡意攻擊或瀏覽器將JavaScript屏蔽的情況,我們應該在后臺進行驗證,但是我們不能每次都將這種請求發到后臺去驗證,這太費資源了,畢竟惡意攻擊者和JavaScript被屏蔽的瀏覽器只是少數。所以,在數據被送到后臺前,我們應該先進行一遍驗證,這樣可以節約很多資源。
????? 下面,我們使用ASP.NET AJAX框架完成客戶端的數據驗證。
????? 說實話,在ASP.NET MVC中使用ASP.NET AJAX或JQuery實在太方便了,不信你展開Scripts文件夾,看到沒,微軟已經把這些庫放到里面了,所以,我們要做的只是直接引用。看我們修改后的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????<script?type="text/javascript"?src="<%=?Url.Content("~/Scripts/MicrosoftAjax.debug.js")?%>"></script>
10????<script?type="text/javascript"?src="<%=?Url.Content("~/Scripts/MicrosoftAjaxValidate.js")?%>"></script>
11</head>
12<body>
13????<%?SelectList?categories?=?ViewData["Categories"]?as?SelectList;?%>
14????<div>
15????????<h1>MVC公告發布系統——發布公告</h1>
16????????<%?Html.BeginForm("DoRelease","Announce",FormMethod.Post);?%>
17????????<dl>
18????????????<dt>標題:</dt>
19????????????<dd><%=?Html.TextBox("Title")?%></dd>
20????????????<dd><span?id="TitleValidator"></span></dd>
21????????????<dt>分類:</dt>
22????????????<dd><%=?Html.DropDownList("Category",categories)?%></dd>
23????????????<dd></dd>
24????????????<dt>內容:</dt>
25????????????<dd><%=?Html.TextArea("Content")?%></dd>
26????????????<dd><span?id="ContentValidator"></span></dd>
27????????</dl>
28????????<input?id="Submit"?type="submit"?value="發布"?/>
29????????<%?Html.EndForm();?%>
30????</div>
31</body>
32</html>

????? 改動有兩處,首先我們在頁頭引用了兩個js文件,第一個是ASP.NET AJAX的庫文件,第二個就是我們一會要實現的包含驗證代碼的js文件了。你可能注意到那個Url.Content了,Url是ViewPage的一個對象,它最常用的一個方法就是Content,它的功能是返回某個文件的路徑。一般情況下,在使用了ASP.NET MVC后,目錄結構變得有點詭異,像js、css、圖片等與路徑(即使是相對路徑)引用相關的地方可能會出現問題,但是,只要你在這些地方用Url.Content生成路徑,而不是直接將路徑寫在頁面里,一般就沒什么問題了。所以,凡是引用js、css、圖片等除,請一定使用Url.Content生成路徑,其參數只有一個,就是文件原始的相對路徑。
????? 下一個改動就是顯示錯誤信息的span不再是Html.ValidationMessage生成的了,而是普通的span。
????? 下面我們在Scripts目錄下新建MicrosoftAjaxValidate.js文件。
MicrosoftAjaxValidate.js:
?1Sys.Application.add_init(onPageInit);
?2
?3function?onPageInit()?{
?4????$addHandler($get("Submit"),?"click",?validate);
?5}

?6
?7function?validate()?{
?8????if?($get("Title").value?==?""?||?$get("Content").value?==?"")?{
?9????????if?($get("Title").value?==?"")?{
10????????????$get("TitleValidator").innerHTML?=?"標題不能為空!";
11????????}

12????????if?($get("Content").value?==?"")?{
13????????????$get("ContentValidator").innerHTML?=?"內容不能為空!";
14????????}

15
16????????return?false;
17????}

18
19????return?true;
20}

????? 關于這段代碼我不多說了,對ASP.NET AJAX有興趣的可以參看《ASP.NET AJAX客戶端編程之旅》系列文章。
????? 現在運行,將標題和內容留空,提交。OK!效果和剛才很像,只不過這次是在客戶端驗證了,并沒有提交到服務器端。

整合JQuery
????? 下面我們再使用JQuery實現這個功能。
????? 其實看懂上面的實現后,我想你已經想到怎么整合JQuery了,無非也是引入相應庫和js文件,然后使用JQuery編寫驗證代碼。修改后的Release.aspx就沒必要看了,無非是引入Scripts目錄下的JQuery庫,然后再引入一個自定義驗證js文件,我們姑且叫JQueryValidate.js吧。
????? 下面在Scripts目錄下新建JQueryValidate.js,代碼如下。
JQueryValidate.js:
?1$(document).ready(function(){
?2????$("#Submit").click(function()?{
?3????????if?($("#Title").attr("value")?==?""?||?$("#Content").attr("value")?==?"")?{
?4????????????if?($("#Title").attr("value")?==?"")?{
?5????????????????$("#TitleValidator").attr("innerHTML",?"標題不能為空!");
?6????????????}

?7????????????if?($("#Content").attr("value")?==?"")?{
?8????????????????$("#ContentValidator").attr("innerHTML",?"內容不能為空!");
?9????????????}

10
11????????????return?false;
12????????}

13
14????????return?true;
15????}

16????);
17}

18);
小結
????? 從本文可以看出,在MVC框架中整合Ajax和普通應用差別不大,唯一就是注意在引用外部js時使用Url.Content方法處理一下相對路徑。其實在本文中我們并沒有使用到Ajax,而僅僅是整合了JavaScirpt,但是這已經足夠了,因為Ajax無非就是在這些JavaScript里包含了異步后臺調用。
????? 其實,ASP.NET MVC有專門針對ASP.NET AJAX的擴展,放在MicrosoftMvcAjax.js里。而在ViewPage里有個叫Ajax的AjaxHelper對象,可以實現一些簡單的異步調用。但是這個擴展的功能很有限,有興趣的可以自己研究一下。我個人還是建議大家自己寫JS代碼,當然可以使用ASP.NET AJAX或JQeury這樣優秀的框架。
????? 這篇文章先到這里,下一篇中我們討論一下攔截器的使用。^_^

轉載于:https://www.cnblogs.com/linpengfeixgu/articles/1331250.html

總結

以上是生活随笔為你收集整理的MVC整合Ajax的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻激情偷乱频一区二区三区 | 国产一区二区三区免费播放 | 国产a免费 | 人人干视频 | 9久精品| 国产91精选| 国产精品jizz在线观看软件 | 99精品中文字幕 | 正在播放adn156松下纱荣子 | 日韩欧美啪啪 | 五月婷六月 | 日本亚洲欧美 | 天天搞天天搞 | 黄色日韩 | 欧美性爱视频久久 | 日本成人激情视频 | 亚洲精品自拍视频 | 久久久久久久久久一区二区 | 加勒比一区二区三区 | 久久久久久亚洲中文字幕无码 | 又黄又爽视频在线观看 | 国产精品自拍在线观看 | 亚洲啪啪免费视频 | av色噜噜| 成人久久毛片 | 久久婷香 | 波多野吉衣毛片 | 三级黄片毛片 | 国产尤物视频在线观看 | 色爱色 | 男人的天堂视频在线观看 | 伊人网影院| 超碰caopeng | 欧美性猛交xxxx免费看久久久 | 午夜福利123| 精品777| 日本大奶子视频 | 丰满少妇xbxb毛片日本 | 日本不卡免费 | 超碰免费在线 | 插插插操操操 | 精品xxxxx| 中文字幕dvd | 欧美午夜精品久久久久久孕妇 | 久久精品高清视频 | 乐播av一区二区三区 | 国产精品久久九九 | 一级免费大片 | 色欲av伊人久久大香线蕉影院 | 精品人妻久久久久一区二区三区 | 欧美成人黄色片 | 久久高清 | 男女啪啪免费网站 | 天天射日日干 | 四虎午夜影院 | 天天躁日日躁bbbbb | 午夜福利啪啪片 | 蜜臀久久精品久久久久久酒店 | 桃谷绘里香在线播放 | 亚洲国产精品va在线看黑人 | 成人免费看aa片 | 欧美激情国产精品 | 青娱乐在线播放 | 日日夜夜91| 最近中文字幕在线mv视频在线 | 国产一av| 日本一区二区三区视频在线观看 | 91成人精品视频 | 欧美成在线视频 | 欧美乱插| 少妇精品亚洲一区二区成人 | 亚洲精品18在线观看 | 激情婷婷小说 | 日本视频网 | 日韩国产欧美视频 | 久久系列| 在线观看视频你懂得 | 国产农村妇女精品一二区 | 日韩精品一区二区三区丰满 | 黄色片子网站 | a v视频在线观看 | 新超碰在线 | 丝袜老师办公室里做好紧好爽 | 在线不卡欧美 | 美女的胸给男人玩视频 | www.xxx在线观看 | 色香欲综合网 | 最新激情网 | 成人久久久久 | 欧美日韩精品中文字幕 | 伦理自拍 | 牛牛澡牛牛爽一区二区 | 成年人免费高清视频 | 久久午夜影院 | 日韩av片在线免费观看 | 91亚洲精品久久久久久久久久久久 | 亚洲电影在线观看 | 日韩激情文学 | 国产精品久久精品三级 |