上篇咱完成了顯示列表的功能,下面接着來
也許您有疑問,這個顯示列表不是和正常的Asp.net Mvc差不多嗎?也是個foreach只是由原來的<%=字段%>變成了<% Html.RenderDynamicField(a, "Title"); %>之流,反倒是多寫了字,除了分頁那裏爽一點以外,其它地方沒見着好處.
下面我們就來看看DynamicData for Asp.net Mvc的好處
前提工作
總有前提工作真是累
這回還是在Application_Start()里加語句,使之成爲
protected void Application_Start() { RegisterRoutes(RouteTable.Routes); var model = new MetaModel(); model.RegisterContext(typeof(DMvc.Models.DMvcDataDataContext), new ContextConfiguration { ScaffoldAllTables = true }); ModelBinders.DefaultBinder = new DynamicDataModelBinder(ModelBinders.DefaultBinder);//增加複雜參數自動綁定功能 }
插入數據
效果圖(頁面爲article/create):
這表單,就算是一個讀過我的/Lulu的/哪怕是SBPP的Asp.net Mvc的文章的初學者也可以建出來,但您看看它的View,您就知道DynamicData for Asp.net Mvc的強大了.
<form method="post"> <% Html.RenderDynamicEntity<Articles>("art"); %> <input type="submit" /> form>
就是這樣,強吧
這裏我補充一下它的Controller(簡單明瞭,不多說明了):
/// /// 用於顯示的頁面 /// [AcceptVerbs(HttpVerbs.Get)] public ActionResult Create() { return View(); } /// /// 用於接收數據的頁面,僅post訪問 /// ///[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(Articles art) { using (var db = new DMvcDataDataContext()) { db.Articles.InsertOnSubmit(art); db.SubmitChanges();//插入數據庫並保存 return RedirectToAction("List");//跳到列表頁 } }
數據驗證
大哥大姐再來看看這效果:
就是加一個驗證,看看有多難:
View加了一句:
<% Html.RenderPartial("ValidationSummary");//加了個這個/不加也可,就是沒有上面的提示了 %> <form method="post"> <% Html.RenderDynamicEntity<Articles>("art"); %> <input type="submit" /> form>
Controller加了個判斷(Get那沒改只改了post):
/// /// 用於接收數據的頁面,僅post訪問 /// ///[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(Articles art) { try { if (ViewData.ModelState.IsValid) { using (var db = new DMvcDataDataContext()) { 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(); }
刪除功能
作爲我最喜歡的功能,在一個列表中刪除功能必不可少:
view,我們改動原來的View添加一個刪除按鈕(list中):
<%foreach (var a in ViewData.Model) { %> <fieldset> <legend> <% Html.RenderDynamicField(a, "Title"); %>legend> 內容:<%Html.RenderDynamicField(a, "Body"); %><br /> 發表日期:<%Html.RenderDynamicField(a, "Addtime"); %> 作者:<%Html.RenderDynamicField(a, "Author"); %><br /> <form action="<%=Url.Action("Delete")%>" method="post" name="del<%=a.ID %>"> <%= Html.Hidden("returnTo", Request.RawUrl) %> <%= Html.Hidden("id", a.ID) %> <input type="submit" value="刪除" /> form> fieldset> <% } %>
我們添加一個刪除的action
/// /// 刪除數據 /// ////// [AcceptVerbs(HttpVerbs.Post)] public ActionResult Delete(long id, string returnTo) { using (var db = new DMvcDataDataContext()) { db.Articles.DeleteOnSubmit( db.Articles.Where(c => c.ID == id).FirstOrDefault()) ; db.SubmitChanges(); //刪除數據庫並保存 return Redirect(returnTo); //跳到列表頁 } }
這樣就可以實現刪除功能了
如果運行以上代碼時出錯,請檢查UrlRouting規則是否含id,如果有,請去掉:
routes.MapRoute( "Default", // Route name "{controller}/{action}", // URL with parameters new { controller = "Home", action = "Index"} // Parameter defaults );
研究一下,我們會看到,我們只差更新沒有講了,留着下回寫