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


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

    
            /// <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();
            }

    这样我们就有了一个同时兼备修改和添加功能的页面.

    示例下载:https://files.cnblogs.com/chsword/DMvc.rar

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

    DynamicData for Asp.net Mvc留言本实例 中篇 新建.删除.数据验证

    DynamicData for Asp.net Mvc留言本实例 上篇 准备工作及显示文章列表

  • 相关阅读:
    [NOIP2013]花匠
    [NOIP2013]货车运输
    [NOIP2013]火柴排队
    [NOIP2012]疫情控制
    雷动WEBRTC产品
    WebRTC学习笔记_Demo收集
    Red5的直播与点播的压力测试(并发数的测试)
    Apache Tomcat8必备知识
    Servlet3.0学习总结(一)——使用注解标注Servlet
    一张图讲清楚高可用、高性能、可扩展的WEB系统架构
  • 原文地址:https://www.cnblogs.com/chsword/p/MvcDynamicData3.html
Copyright © 2020-2023  润新知