DynamicData for Asp.net Mvc留言本執行個體 下篇 更新

來源:互聯網
上載者:User

我並不打算再建一個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();        }

這樣我們就有了一個同時兼備修改和添加功能的頁面.

 

樣本下載:http://files.cnblogs.com/chsword/DMvc.rar

 

DynamicData for Asp.net Mvc留言本執行個體 下篇 更新

DynamicData for Asp.net Mvc留言本執行個體 中篇 建立.刪除.資料驗證

DynamicData for Asp.net Mvc留言本執行個體 上篇 準備工作及顯示文章列表

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.