ASP.NET MVC 2 学习笔记二: 表单的灵活提交
?
?
?
?
ASP.NET MVC 2 學(xué)習(xí)筆記二:? 表單的靈活提交
?
?
前面說(shuō)到有做到公司內(nèi)部的一個(gè)請(qǐng)假系統(tǒng),用的是ASP.NET MVC 2+Entity Framework。雖然EF(Entity Framework簡(jiǎn)稱(chēng),以下簡(jiǎn)稱(chēng)EF,恕不贅述)簡(jiǎn)單方便,提供了幾乎大半的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的方法。但是,仍然有些瑕疵,所以不得不綜合linq方法,以期達(dá)到完美。
表單提交問(wèn)題,EF提供了TryUpdateModel和UpdateModel兩種方法來(lái)更新數(shù)據(jù)表,例如,我要更新請(qǐng)假的信息時(shí),可以這樣寫(xiě):
1 [HttpPost]2 public ActionResult EditLeaving(FormCollection form)
3 {
4 var infoid = Int32.Parse(form["infoid"]);
5 var leavingInfoToUpdate = _Staffdb.LeavingInformation.First(m => m.InfoId == infoid);
6
7 // Deserialize (Include white list!)
8 TryUpdateModel(leavingInfoToUpdate, new string[] { "StartTime", "EndTime", "Details" }, form.ToValueProvider());
9
10
11 if (String.IsNullOrEmpty(leavingInfoToUpdate.StartTime.ToString()))
12 ModelState.AddModelError("StartTime", "StartTime is required!");
13 if (String.IsNullOrEmpty(leavingInfoToUpdate.EndTime.ToString()))
14 ModelState.AddModelError("EndTime", "EndTime is required!");
15
16
17 if (ModelState.IsValid && leavingInfoToUpdate.Details.ToString() != "")
18 {
19 _Staffdb.SaveChanges();
20 return RedirectToAction("RequestLeave");
21 }
22
23 // Otherwise, reshow form
24 return View(leavingInfoToUpdate);
25 }
可以看出TryUpdateModel方法第一個(gè)參數(shù)是要更新的數(shù)據(jù)行l(wèi)eavingInfoToUpdate,第二個(gè)參數(shù)列了一份白名單,其中包括了要更新的字段名StartTime、EndTime和Details,第三個(gè)參數(shù)傳進(jìn)數(shù)據(jù)的提供源信息,這里使用表單提交form.ToValueProvider()。
如果采用這種更新方式,很明顯不夠靈活,當(dāng)然TryUpdateModel還有第四個(gè)參數(shù),列出一份黑名單,即使不更新的字段。但是如果所列出的某些字段,不是由表單提供的,例如RequestTime字段,是由表單提交時(shí)的當(dāng)前時(shí)間提供,怎們辦呢?
在網(wǎng)上找了很久,終于找到一種方法,應(yīng)該來(lái)說(shuō)是在ASP.NET MVC 1.0中提供,就能夠比較靈活的解決當(dāng)前表單提交的問(wèn)題。下面,我就在管理員身份時(shí),對(duì)添加員工的表單提交,舉例如下,下面是Controllers層的代碼:
1 /// <summary>2 /// 添加員工信息
3 /// </summary>
4 /// <returns></returns>
5 public ActionResult AddStaff()
6 {
7 var alicename = Environment.UserName;
8 var personInfo = _Staffdb.StaffList.First(m => m.AliceName == alicename);
9
10 var id = personInfo.Id;
11 ViewData["StaffId"] = id;
12
13 List<StaffIdentity> identity = _Staffdb.StaffIdentity.ToList();
14 ViewData["Identity"] = new SelectList(identity,"IdentityId","IdentityName");
15
16 return View();
17 }
18
19 [HttpPost]
20 public ActionResult AddStaff(FormCollection form)
21 {
22 StaffList stafflist = new StaffList();
23 stafflist.AliceName = form["AliceName"];
24 stafflist.EnName = form["EnName"];
25 stafflist.CnName=form["CnName"];
26
27 int identityid = Convert.ToInt32(form["IdentityName"].ToString());
28 stafflist.IdentityId = identityid;
29
30 _Staffdb.AddToStaffList(stafflist);
31 _Staffdb.SaveChanges();
32
33 return RedirectToAction("ShowStaffInfo");
34 }
上面的alicename是由Environment.UserName來(lái)獲取的當(dāng)前系統(tǒng)用戶(hù)的用戶(hù)名。在表單提交的Action方法AddStaff中,首先new一個(gè)StaffList表的同名實(shí)體模型類(lèi)stafflist,然后依次通過(guò)stafflist.AliceName = form["AliceName"]; 的方法來(lái)給這個(gè)模型類(lèi)對(duì)象賦予表單中提供的值。重點(diǎn)是,請(qǐng)注意,stafflist.IdentityId = identityid; 得identityid是通過(guò)我所需要的值轉(zhuǎn)換而來(lái)的。然后再把這個(gè)對(duì)象加在_staffdb之中,保存即可。這樣,就可以很靈活的更新我所需要的值,而不單單是表單提供值的方法來(lái)提供了。
其中,AddStaff界面如下:
OK,至此,表單的靈活提交問(wèn)題已經(jīng)解決了!
Ps:本人的界面美工不是很好,所以就簡(jiǎn)單采用了微軟提供的例子程序中的css。見(jiàn)諒見(jiàn)諒,呵呵!
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/MarkRao/archive/2012/02/17/2355475.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET MVC 2 学习笔记二: 表单的灵活提交的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ReportViewer中设置Serve
- 下一篇: 双向循环链表:字母表实现前后移动