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

简介: 我并不打算再建一个edit页来实现更新,而打算用现有的create页来实现更新功能 虽然也许这样并不符合其语义,但我仍想这么做,因为asp那时候大家都是把增删改查放在一个页面的只用参数来区别 如: article?m=add article?m=modfiy article?m=delete 由于控件的流行,细节被Asp.

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

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

 

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

 

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

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

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

目录
打赏
0
0
0
0
1
分享
相关文章
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
84 7
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
123 0
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
87 0
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
252 0
|
7月前
|
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
195 0
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
99 0
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
189 0
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
414 5

热门文章

最新文章

相关实验场景

更多