DynamicData for Asp.net Mvc留言本例項 下篇 更新
阿新 • • 發佈:2018-12-27
我並不打算再建一個edit頁來實現更新,而打算用現有的create頁來實現更新功能
雖然也許這樣並不符合其語義,但我仍想這麼做,因為asp那時候大家都是把增刪改查放在一個頁面的只用引數來區別
如:
article?m=add
article?m=modfiy
article?m=delete
由於控制元件的流行,細節被Asp.net隱匿了起來,很多朋友不再通過QueryString或隱藏表單來控制功能,或者未接觸過Asp的朋友從來也沒有想過這麼做,因為GridView等控制元件提供了增刪功能.
但是Asp.net Mvc下我們是否應該重新認識一下這種些基礎的東西呢
因為一個朋友剛剛問了我一個關於通過QueryString來區分Add/Edit的問題,所以感觸挺多,囉嗦幾句,大家見諒
而我這裡為了不破壞前面所講的結構所以只能將錯就錯一下,為Create新增一個id的可空引數,如果id為空即為新增,如果有id的值傳過來就是編輯
OK開動.
首先在列表中先加一個修改的連線
<!--顯示列表開始--> <%foreach (var a in ViewData.Model) { %> <fieldset> <legend> <% Html.RenderDynamicField(a, "Title"); %></legend> //.... <%=Html.ActionLink("修改","Create",new{id=a.ID},null) %></fieldset> <% } %>
這裡我們將id傳了過去
在create頁我們將view修改一下:
<form method="post"> <% Html.RenderDynamicEntity("art", ViewData.Model , ViewData.Model == null ? DataBoundControlMode.Insert : DataBoundControlMode.Edit); %><input type="submit" /> </form>
這樣view頁就可以自動生成新增或修改的表單,而其判斷依據是ViewData.Model是否存在值
我們在Controller中對id進行判斷,如果存在則給ViewData.Model賦值
/// <summary> /// 用於顯示的頁面 /// </summary> [AcceptVerbs(HttpVerbs.Get)] public ActionResult Create(long? id) { if(id.HasValue) { using (var db = new DMvcDataDataContext()) { var art=db.Articles.Where(c => c.ID == id.Value).FirstOrDefault(); return View(art); } } return View(); }
同樣,我們在它的處理Action也做一個判斷
/// <summary> /// 用於接收資料的頁面,僅post訪問 /// </summary> /// <param name="id"></param> /// <param name="art"></param> /// <returns></returns> [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(long? id,Articles art) { try { if (ViewData.ModelState.IsValid) { using (var db = new DMvcDataDataContext()) { if (id.HasValue) { //在存在id時修改資料 var a = db.Articles.Where(c => c.ID == id).FirstOrDefault(); a.Title = art.Title; a.Body = art.Body; a.Author = art.Author; a.AddTime = art.AddTime; } else {//不存在id時新增資料 db.Articles.InsertOnSubmit(art); } db.SubmitChanges(); return RedirectToAction("List"); } } } catch (Exception ex) { ModelState error = new ModelState(); error.Errors.Add(ex); ViewData.ModelState.Add("Category", error); } return View(); }
這樣我們就有了一個同時兼備修改和新增功能的頁面.