ASP.NET MVC 2 学习笔记二: 表单的灵活提交
?
?
?
?
ASP.NET MVC 2 學習筆記二:? 表單的靈活提交
?
?
前面說到有做到公司內部的一個請假系統,用的是ASP.NET MVC 2+Entity Framework。雖然EF(Entity Framework簡稱,以下簡稱EF,恕不贅述)簡單方便,提供了幾乎大半的數據庫訪問的方法。但是,仍然有些瑕疵,所以不得不綜合linq方法,以期達到完美。
表單提交問題,EF提供了TryUpdateModel和UpdateModel兩種方法來更新數據表,例如,我要更新請假的信息時,可以這樣寫:
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方法第一個參數是要更新的數據行leavingInfoToUpdate,第二個參數列了一份白名單,其中包括了要更新的字段名StartTime、EndTime和Details,第三個參數傳進數據的提供源信息,這里使用表單提交form.ToValueProvider()。
如果采用這種更新方式,很明顯不夠靈活,當然TryUpdateModel還有第四個參數,列出一份黑名單,即使不更新的字段。但是如果所列出的某些字段,不是由表單提供的,例如RequestTime字段,是由表單提交時的當前時間提供,怎們辦呢?
在網上找了很久,終于找到一種方法,應該來說是在ASP.NET MVC 1.0中提供,就能夠比較靈活的解決當前表單提交的問題。下面,我就在管理員身份時,對添加員工的表單提交,舉例如下,下面是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來獲取的當前系統用戶的用戶名。在表單提交的Action方法AddStaff中,首先new一個StaffList表的同名實體模型類stafflist,然后依次通過stafflist.AliceName = form["AliceName"]; 的方法來給這個模型類對象賦予表單中提供的值。重點是,請注意,stafflist.IdentityId = identityid; 得identityid是通過我所需要的值轉換而來的。然后再把這個對象加在_staffdb之中,保存即可。這樣,就可以很靈活的更新我所需要的值,而不單單是表單提供值的方法來提供了。
其中,AddStaff界面如下:
OK,至此,表單的靈活提交問題已經解決了!
Ps:本人的界面美工不是很好,所以就簡單采用了微軟提供的例子程序中的css。見諒見諒,呵呵!
?
?
轉載于:https://www.cnblogs.com/MarkRao/archive/2012/02/17/2355475.html
總結
以上是生活随笔為你收集整理的ASP.NET MVC 2 学习笔记二: 表单的灵活提交的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ReportViewer中设置Serve
- 下一篇: WPF xml配置文件里面的大于小于号