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

简介: 上篇咱完成了显示列表的功能,下面接着来 也许您有疑问,这个显示列表不是和正常的Asp.net Mvc差不多吗?也是个foreach只是由原来的变成了之流,反倒是多写了字,除了分页那里爽一点以外,其它地方没见着好处.

上篇咱完成了显示列表的功能,下面接着来

也许您有疑问,这个显示列表不是和正常的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):

image

这表单,就算是一个读过我的/Lulu的/哪怕是SBPP的Asp.net Mvc的文章的初学者也可以建出来,但您看看它的View,您就知道DynamicData for Asp.net Mvc的强大了.

             <form method="post">
                <% Html.RenderDynamicEntity<Articles>("art"); %>
                <input type="submit" />
            </form>

就是这样,强吧

这里我补充一下它的Controller(简单明了,不多说明了):

        /// <summary>
        /// 用于显示的页面
        /// </summary>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Create()
        {
            return View();
        }
        /// <summary>
        /// 用于接收数据的页面,仅post访问
        /// </summary>
        /// <param name="art"></param>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(Articles art) {
            using (var db = new DMvcDataDataContext())
            {
                db.Articles.InsertOnSubmit(art);
                db.SubmitChanges();//插入数据库并保存
                return RedirectToAction("List");//跳到列表页
            }
        }

数据验证

 

大哥大姐再来看看这效果:

image

就是加一个验证,看看有多难:

View加了一句:

            <% Html.RenderPartial("ValidationSummary");//加了个这个/不加也可,就是没有上面的提示了 %>
            <form method="post">
                <% Html.RenderDynamicEntity<Articles>("art"); %>
                <input type="submit" />
            </form>

Controller加了个判断(Get那没改只改了post):

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

 
        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="id"></param>
        /// <param name="returnTo"></param>
        [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
			);

 

研究一下,我们会看到,我们只差更新没有讲了,留着下回写

 

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

 

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

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

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

目录
相关文章
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
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,然后在重定向到另
99 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
116 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
113 0
|
9月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
144 0