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

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

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

这表单,就算是一个读过我的/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");//跳到列表页
            }
        }

数据验证

 

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

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

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留言本实例 上篇 准备工作及显示文章列表

时间: 2024-09-23 02:57:50

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

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

上篇咱完成了显示列表的功能,下面接着来 也许您有疑问,这个显示列表不是和正常的Asp.net Mvc差不多吗?也是个foreach只是由原来的<%= 字段%>变成了<% Html.RenderDynamicField(a, "Title"); %>之流,反倒是多写了字,除了分页 那里爽一点以外,其它地方没见着好处. 下面我们就来看看DynamicData for Asp.net Mvc的好处 前提工作 总有前提工作真是累 这回还是在Application_Sta

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

我并不打算再建一个edit页来实现更新,而打算用现有的create页来实现更新功能 虽然也许这样并不符合其语义,但我仍想这么做,因为asp那时候大家都是把增删改查放在一个页面的只用参数来区别 如: article?m=add article?m=modfiy article?m=delete 由于控件的流行,细节被Asp.net隐匿了起来,很多朋友不再通过QueryString或隐藏表单来控制功能,或者未接触过Asp的朋友从来也没有想过这么做,因为GridView等控件提供了增删功能. 但是As

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

下载及新建工程 下载地址:http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx 选那个 DynamicDataMVC.zip就行,如随版本变化,请大家举一反三. 本文环境为Visual Studio 2008/Sql Server 2005 建立一个Asp.net Mvc工程:DMvc 引用Microsoft.Web.DynamicData.Mvc.DLL,及系统组件System.ComponentModel.DataAnnota

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示例项目“Suteki.Shop”分析之数据验证

在Suteki.Shop,实现了自己的数据校验机制,可以说其设计思路还是很有借鉴价值的.而使用这种 机制也很容易在Model中对相应的实体对象(属性)添加校验操作方法.下面就来介绍一下其实现方式. 首先,看一下这样类图: 在Suteki.Shop定 义一个"IValidatingBinder"接口,其派生自IModelBinder: 其接口中定义了一个 重载方法UpdateFrom,其要实现的功能与MVC中UpdateFrom一样,就是自动读取我们在form中定义的有些 元素及其中所包

一个简单的php MVC留言本实例代码(必看篇)_php实例

摘要 标题上我把这个留言板叫最简单的,其实应该叫最简陋的,因为把全部注意力集中在MVC模式设计和实现上,所以UI方面几乎没有一点修饰. 这个小程序一共包含6个文件,其中index.php是程序入口.post.htm是留言表单.在lib文件夹里Model.View .Controller三个文件分别实现MVC,DataAccess是一个简单的数据库访问类.其实这个程序是国外的一个人写的. PHP代码: /** * 一个用来访问MySQL的类 * 仅仅实现演示所需的基本功能,没有容错等 * 代码未作

ASP.NET MVC 5 入门教程 (1) 新建项目

原文:ASP.NET MVC 5 入门教程 (1) 新建项目 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-create-project.html  下一节:ASP.NET MVC 5 入门教程 (2) 控制器Controller 本教程使用Visual Studio Express 2013 for Web 运行,强烈建议跟着教程边看边做.如果在操作中遇到什么问题,欢迎留言指出. Visual Stud

asp.net mvc 关于FormCollection collection采集不到数据问题.大神们帮帮忙谢谢,指点一下也可以

问题描述 asp.net mvc 关于FormCollection collection采集不到数据问题.大神们帮帮忙谢谢,指点一下也可以 新手求请教!就是FormCollection collection采集不到前台的数据,之前用的时候从没出现这种问题. 解决方案 你在控制器端试试不要用FormCollection collection来接收,先试试用 public ActionResult xxxxxx(string line)来接收试试看 解决方案二: 视图转型了吗?引用mvc的js文件了

asp.net mvc中,ip怎么传入sql数据库库

问题描述 asp.net mvc中,ip怎么传入sql数据库库 asp.net mvc中,我在control中获取了ip地址,但是怎么传入sql数据库呢?新手,只知道怎么提交用户填写的表单里的数据... 解决方案 假设你用的是ef一类的框架,那么xxxDataEntites db = new xxxDataEntites();db.表.Add(new 实体 { ip = 你获得的ip });db.SaveChanges(); 解决方案二: ajax啊,你给他绑到用户点击的地方 解决方案三: 在数