DynamicData for Asp.net Mvc留言本实例 下篇 更新

来源:互联网 发布:windows电脑护眼模式 编辑:程序博客网 时间:2024/06/15 23:40

我并不打算再建一个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><% } %>

image

这里我们将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赋值

        ///         /// 用于显示的页面        ///         [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也做一个判断

///         /// 用于接收数据的页面,仅post访问/// /// 
/// /// [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

原创粉丝点击