當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀] 先看一下我要實(shí)現(xiàn)的功能界面: 這個(gè)界面的功能在圖中已有展現(xiàn),課程分配(教師教授哪門課程)在之前的頁(yè)面中已做好。這個(gè)頁(yè)面主要實(shí)現(xiàn)的是授課,即給老師教授的課程分配學(xué)生。此頁(yè)面實(shí)現(xiàn)功能的步驟已

先看一下我要實(shí)現(xiàn)的功能界面:


這個(gè)界面的功能在圖中已有展現(xiàn),課程分配(教師教授哪門課程)在之前的頁(yè)面中已做好。這個(gè)頁(yè)面主要實(shí)現(xiàn)的是授課,即給老師教授的課程分配學(xué)生。此頁(yè)面實(shí)現(xiàn)功能的步驟已在頁(yè)面中有所體現(xiàn),這里不再贅述,此篇文章主要介紹:我是如何通過js從前臺(tái)獲取數(shù)據(jù),然后通過ajax技術(shù)向后臺(tái)一般處理程序傳遞JSON,后臺(tái)又是如何獲取傳來的JSON,并對(duì)JSON數(shù)據(jù)轉(zhuǎn)換,然后將轉(zhuǎn)換后的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的!


介紹這些步驟實(shí)現(xiàn)前,先說說自己的辛酸:絮叨辛酸,是因?yàn)闉榱藢?shí)現(xiàn)這個(gè)功能,我真的用了很長(zhǎng)時(shí)間!為了讓用戶看著舒服點(diǎn),這個(gè)頁(yè)面的實(shí)現(xiàn)我寫了700多行的JS代碼和9個(gè)一般處理程序!為了避免頁(yè)面刷新影響效果,又不想使用VS自帶的UpdatePanel AJAX控件,感覺這個(gè)控件會(huì)帶來不少后患,所以這個(gè)頁(yè)面的實(shí)現(xiàn)我使用了大量JS代碼。從后臺(tái)一般處理程序向前臺(tái)傳遞JSON,前臺(tái)解析JSON并顯示在界面,這樣的實(shí)現(xiàn)網(wǎng)上例子很多,非常容易實(shí)現(xiàn),我也寫了一篇博客來記錄自己的成長(zhǎng),見《《項(xiàng)目經(jīng)驗(yàn)》--后臺(tái)一般處理程序向前臺(tái)JS文件傳遞JSON,JS解析JSON,將數(shù)據(jù)顯示在界面--顯示在DropDownList 或 顯示在動(dòng)態(tài)創(chuàng)建的table中》;而從前臺(tái)向后臺(tái)傳遞JSON用法,卻讓我費(fèi)盡周折,最終也沒找到一個(gè)完整的實(shí)例,但最后將問題分成幾個(gè)步驟,然后一步步解決了!

下面分享下我的經(jīng)驗(yàn),希望對(duì)用到此功能的戰(zhàn)友有所幫助,當(dāng)然我這樣實(shí)現(xiàn)有什么缺陷,還希望得到高人指點(diǎn)!


1.界面層添加信息列表部分html代碼

[html]view plaincopy print?

添加信息列表

教師名: <%--隱藏控件,保存教師id--%> 課程名: <%--隱藏控件,保存課程id--%> <%--隱藏控件,保存教師、課程關(guān)系indexing--%> 選擇上課班: <%----%> 已選授課人數(shù) 學(xué)生姓名列表

<%----%>


選擇完學(xué)年學(xué)期、教師、課程、學(xué)生后,點(diǎn)擊"確認(rèn)添加"按鈕,執(zhí)行"添加授課信息"事件!


2.通過JS獲取前臺(tái)授課數(shù)據(jù),并向后臺(tái)一般處理程序傳遞

[javascript]view plaincopy print? //*******************************************授課點(diǎn)擊事件******************************************// //添加授課信息 functionAddTeachCourse(){ //取得教師ID varstrTeacherID=$("#hidFieldSaveTeacherID").val(); //alert("教師ID="+txtTeacherID); //取得課程ID varstrCourseID=$("#hidFieldSaveCourseID").val(); //alert("課程ID="+txtCourseID); //取得上課班ID varstrTeachClassID=document.getElementById("ddlTeachClass"); varTeachClassID=strTeachClassID.options[strTeachClassID.selectedIndex].value;//得到ID //取得課程分配的ID(Indexing) varIndexing=$("#hidFieldSaveIndexing").val(); //取得學(xué)生數(shù)量 varstuNum=$("#txtStuNum").val(); //取得listbox框ID varlistStudent=document.getElementById("lsboxStudent"); //取得listbox框中元素長(zhǎng)度 varlstStuLength=listStudent.options.length; //varobjJsons=""; //varStuArrayObj=newArray();//創(chuàng)建一個(gè)數(shù)組,存儲(chǔ)學(xué)生ID //StuArrayObj[i]=StudentID;//向數(shù)組中添加學(xué)生ID //*******************以下是:轉(zhuǎn)換json對(duì)象的過程*************************// varStuArrayObjs=[];//定義一個(gè)空串 for(vari=0;i 以上有幾個(gè)需要注意的地方:

2.1.轉(zhuǎn)換JSON串使用

[javascript]view plaincopy print? JSON.stringify()

2.2.JS向一般處理程序傳遞JSON使用

[javascript]view plaincopy print? //與AJAX交互,向一般處理程序傳遞json字符串?dāng)?shù)組,并返回結(jié)果 $.post("要使用的一般處理程序路徑",{TeachCourseJson:TeachCourseJsonString},function(data){ alert(data); });

3.一般處理程序解析JS傳遞過來的Json數(shù)據(jù),并進(jìn)行解析,寫入DataTable中,然后寫入數(shù)據(jù)庫(kù)

[csharp]view plaincopy print? <%@WebHandlerLanguage="C#"Class="AddTeachCourse"%> /******************************************************************************* *文件:AddTeachCourse.ashx *作者:mzj *所屬小組:評(píng)教小組 *文件說明:添加授課信息 *創(chuàng)建日期:2013年2月6日17:57:01 *修改作者: *修改日期: *修改描述: *版本號(hào):V1.0 *版本號(hào)變更記錄: ********************************************************************************/ usingSystem; usingSystem.Web; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Data; //json使用命名空間 usingNewtonsoft.Json; usingNewtonsoft.Json.Linq; usingNewtonsoft.Json.Converters; usingSystem.IO; usingSystem.Text; usingTeachSystem.BLL.TeachingBLL; usingTeachSystem.Entity.TeachingEntity; publicclassAddTeachCourse:IHttpHandler { publicvoidProcessRequest(HttpContextcontext) { context.Response.ContentType="text/plain"; //創(chuàng)建一個(gè)名為ds_StuTeacherCourse的DataSet //(用于存放表:學(xué)生、教師、課程關(guān)系表,學(xué)生、上課班關(guān)系表,課程分配上課班關(guān)系表) DataSetdsStuTeacherCourse=newDataSet("ds_StuTeacherCourse"); //手動(dòng)創(chuàng)建的新數(shù)據(jù)表-學(xué)生、教師、課程關(guān)系數(shù)據(jù)表 DataTabledtAddStudentTeaherCourse=newDataTable("dt_AddStudentTeaherCourse");//創(chuàng)建一個(gè)名為dt_AddStudentTeaherCourse的DataTalbe //為dt_AddStudentTeaherCourse表內(nèi)建立Column(表頭),添加數(shù)據(jù)列:StudentID,Indexing,IsAvailable dtAddStudentTeaherCourse.Columns.Add(newDataColumn("StudentID",typeof(string))); dtAddStudentTeaherCourse.Columns.Add(newDataColumn("Indexing",typeof(int))); dtAddStudentTeaherCourse.Columns.Add(newDataColumn("IsAvailable",typeof(string))); //手動(dòng)創(chuàng)建的新數(shù)據(jù)表-學(xué)生、上課班關(guān)系數(shù)據(jù)表 DataTabledtAddStudentTeachClass=newDataTable("dt_AddStudentTeachClass");//創(chuàng)建一個(gè)名為dt_AddStudentTeachClass的DataTalbe //為dt_AddStudentTeachClass表內(nèi)建立Column(表頭),添加數(shù)據(jù)列:StudentID,TeachClassID,IsAvailable dtAddStudentTeachClass.Columns.Add(newDataColumn("StudentID",typeof(string))); dtAddStudentTeachClass.Columns.Add(newDataColumn("TeachClassID",typeof(string))); dtAddStudentTeachClass.Columns.Add(newDataColumn("IsAvailable",typeof(string))); //手動(dòng)創(chuàng)建的新數(shù)據(jù)表-課程分配、上課班關(guān)系數(shù)據(jù)表 DataTabledtAddCourseTeachClass=newDataTable("dt_AddCourseTeachClass");//創(chuàng)建一個(gè)名為dt_AddStudentTeachClass的DataTalbe //為dt_AddCourseTeachClass表內(nèi)建立Column(表頭),添加數(shù)據(jù)列:TeachClassID,Indexing,IsAvailable dtAddCourseTeachClass.Columns.Add(newDataColumn("TeachClassID",typeof(string))); dtAddCourseTeachClass.Columns.Add(newDataColumn("Indexing",typeof(int))); dtAddCourseTeachClass.Columns.Add(newDataColumn("IsAvailable",typeof(string))); dtAddCourseTeachClass.Columns.Add(newDataColumn("OddEven",typeof(string))); dtAddCourseTeachClass.Columns.Add(newDataColumn("StuNum",typeof(int))); //獲取前臺(tái)傳遞過來的授課JSON字符串?dāng)?shù)組 stringss=context.Request.Form["TeachCourseJson"]; //反序列化獲取的JSON字符串?dāng)?shù)組 JArrayjavascript=(JArray)JsonConvert.DeserializeObject(ss); //依次遍歷反序列化的json字符串?dāng)?shù)組 for(inti=0;i

3.1 獲取前臺(tái)傳遞過來的JSON字符串?dāng)?shù)組

[csharp]view plaincopy print? //獲取前臺(tái)傳遞過來的授課JSON字符串?dāng)?shù)組 stringss=context.Request.Form["TeachCourseJson"];

3.2 反序列化前臺(tái)傳來的JSON字符才能換數(shù)組

[csharp]view plaincopy print? //反序列化獲取的JSON字符串?dāng)?shù)組 JArrayjavascript=(JArray)JsonConvert.DeserializeObject(ss);

3.3自定義Dataset,并建立各數(shù)據(jù)表,將前臺(tái)傳來的數(shù)據(jù)寫入DataTable表

創(chuàng)建Dataset及數(shù)據(jù)表

[csharp]view plaincopy print? //創(chuàng)建一個(gè)名為ds_StuTeacherCourse的DataSet //(用于存放表:學(xué)生、教師、課程關(guān)系表,學(xué)生、上課班關(guān)系表,課程分配上課班關(guān)系表) DataSetdsStuTeacherCourse=newDataSet("ds_StuTeacherCourse"); //手動(dòng)創(chuàng)建的新數(shù)據(jù)表-學(xué)生、教師、課程關(guān)系數(shù)據(jù)表 DataTabledtAddStudentTeaherCourse=newDataTable("dt_AddStudentTeaherCourse");//創(chuàng)建一個(gè)名為dt_AddStudentTeaherCourse的DataTalbe //為dt_AddStudentTeaherCourse表內(nèi)建立Column(表頭),添加數(shù)據(jù)列:StudentID,Indexing,IsAvailable dtAddStudentTeaherCourse.Columns.Add(newDataColumn("StudentID",typeof(string))); dtAddStudentTeaherCourse.Columns.Add(newDataColumn("Indexing",typeof(int))); dtAddStudentTeaherCourse.Columns.Add(newDataColumn("IsAvailable",typeof(string))); //手動(dòng)創(chuàng)建的新數(shù)據(jù)表-學(xué)生、上課班關(guān)系數(shù)據(jù)表 DataTabledtAddStudentTeachClass=newDataTable("dt_AddStudentTeachClass");//創(chuàng)建一個(gè)名為dt_AddStudentTeachClass的DataTalbe //為dt_AddStudentTeachClass表內(nèi)建立Column(表頭),添加數(shù)據(jù)列:StudentID,TeachClassID,IsAvailable dtAddStudentTeachClass.Columns.Add(newDataColumn("StudentID",typeof(string))); dtAddStudentTeachClass.Columns.Add(newDataColumn("TeachClassID",typeof(string))); dtAddStudentTeachClass.Columns.Add(newDataColumn("IsAvailable",typeof(string))); //手動(dòng)創(chuàng)建的新數(shù)據(jù)表-課程分配、上課班關(guān)系數(shù)據(jù)表 DataTabledtAddCourseTeachClass=newDataTable("dt_AddCourseTeachClass");//創(chuàng)建一個(gè)名為dt_AddStudentTeachClass的DataTalbe //為dt_AddCourseTeachClass表內(nèi)建立Column(表頭),添加數(shù)據(jù)列:TeachClassID,Indexing,IsAvailable dtAddCourseTeachClass.Columns.Add(newDataColumn("TeachClassID",typeof(string))); dtAddCourseTeachClass.Columns.Add(newDataColumn("Indexing",typeof(int))); dtAddCourseTeachClass.Columns.Add(newDataColumn("IsAvailable",typeof(string))); dtAddCourseTeachClass.Columns.Add(newDataColumn("OddEven",typeof(string))); dtAddCourseTeachClass.Columns.Add(newDataColumn("StuNum",typeof(int))); 向數(shù)據(jù)表填充數(shù)據(jù),例如

[csharp]view plaincopy print? //添加課程分配、上課班關(guān)系信息表的新行 DataRowdrAddCourseTeachClass=dtAddCourseTeachClass.NewRow();//注意這邊創(chuàng)建dt的新行的方法。指定類型是DataRow而不是TableRow,然后不用new直接的用創(chuàng)建的DataTable下面的NewRow方法。 //課程分配、上課班關(guān)系信息表對(duì)應(yīng)的各列值 drAddCourseTeachClass["TeachClassID"]=strTeachClassIDs; drAddCourseTeachClass["Indexing"]=intIndexings; drAddCourseTeachClass["IsAvailable"]="是"; drAddCourseTeachClass["OddEven"]=null; drAddCourseTeachClass["StuNum"]=intStuNums; dtAddCourseTeachClass.Rows.Add(drAddCourseTeachClass);//將一整條數(shù)據(jù)寫入表中 將各數(shù)據(jù)表存入DataSet

[csharp]view plaincopy print? //將各表加入DataSet中: dsStuTeacherCourse.Tables.Add(dtAddStudentTeaherCourse); dsStuTeacherCourse.Tables.Add(dtAddStudentTeachClass); dsStuTeacherCourse.Tables.Add(dtAddCourseTeachClass);

3.4將DataSet中各數(shù)據(jù)表寫入數(shù)據(jù)庫(kù)

[csharp]view plaincopy print? //將DataSet中數(shù)據(jù)表導(dǎo)入數(shù)據(jù)庫(kù) BooleanflagImportStuTeacherCourse=newTeachCourseBLL().ImportStudentTeacherCourse(dsStuTeacherCourse);

這篇文章僅僅介紹了添加授課功能的實(shí)現(xiàn),所需要的JS文件及一般處理程序文件,導(dǎo)入數(shù)據(jù)庫(kù)用到的BLL層類方法等沒有介紹,批量導(dǎo)入數(shù)據(jù)功能的實(shí)現(xiàn)見博客《《項(xiàng)目經(jīng)驗(yàn)》--簡(jiǎn)單三層使用DataTable向數(shù)據(jù)庫(kù)表批量導(dǎo)入數(shù)據(jù)---向SqlServer一張表中導(dǎo)入數(shù)據(jù)》《《項(xiàng)目經(jīng)驗(yàn)》--簡(jiǎn)單三層使用DataTable向數(shù)據(jù)庫(kù)表批量導(dǎo)入數(shù)據(jù)---向SqlServer多張張表中導(dǎo)入數(shù)據(jù)》!






本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉