asp.net MVC2 初探四

今天教大家如何利用ADO.Net 或者linq实现数据增删改查,新建一个项目
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Linq; 
InBlock.gif using System.Data.Linq; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Mvc; 
InBlock.gif using System.Data.Linq.Mapping; 
InBlock.gif using MvcApplication1.Models; 
InBlock.gif namespace MvcApplication1.Controllers 
InBlock.gif
InBlock.gif         public  class MovieController : Controller 
InBlock.gif        { 
InBlock.gif                MoviesEntities1 _db =  new MoviesEntities1(); 
InBlock.gif 
InBlock.gif 
InBlock.gif                 public ActionResult Index() 
InBlock.gif                { 
InBlock.gif                        ViewData.Model =  new MoviesEntities1().Movies.ToList(); 
InBlock.gif                         return View(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 public ActionResult Details( int id) 
InBlock.gif                { 
InBlock.gif 
InBlock.gif                        var model =  new MoviesEntities1().Movies.First(m => m.ID == id); 
InBlock.gif                         return View(model); 
InBlock.gif                } 
InBlock.gif                 public ActionResult Create() 
InBlock.gif                { 
InBlock.gif                         return View(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif 
InBlock.gif                [AcceptVerbs(HttpVerbs.Post)] 
InBlock.gif                 public ActionResult Create(Models.Movie m) 
InBlock.gif                { 
InBlock.gif                         try 
InBlock.gif                        { 
InBlock.gif                                _db.AddToMovies(m); 
InBlock.gif                                 if ( string.IsNullOrEmpty(m.Movie_Name)) 
InBlock.gif                                { 
InBlock.gif                                        ModelState.AddModelError( "Movie_Name""电影名称不能为空!"); 
InBlock.gif                                } 
InBlock.gif                                 if (m.Realease_Date ==  null
InBlock.gif                                { 
InBlock.gif                                        ModelState.AddModelError( "Realease_Date""放映时间不能为空"); 
InBlock.gif                                } 
InBlock.gif                                 foreach (Movie mv  in _db.Movies) 
InBlock.gif                                { 
InBlock.gif                                         if (mv.ID == m.ID) 
InBlock.gif                                        { 
InBlock.gif                                                ModelState.AddModelError( "ID""数据库中已经存在Id为" + m.ID +  "的数据"); 
InBlock.gif                                                 break
InBlock.gif                                        } 
InBlock.gif                                } 
InBlock.gif                                 if (ModelState.IsValid) 
InBlock.gif                                { 
InBlock.gif                                        _db.SaveChanges(); 
InBlock.gif                                         return RedirectToAction( "Index"); 
InBlock.gif                                } 
InBlock.gif                                 return View(m); 
InBlock.gif                        } 
InBlock.gif                         catch 
InBlock.gif                        { 
InBlock.gif                                 return View(); 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 public ActionResult Edit( int id) 
InBlock.gif                { 
InBlock.gif 
InBlock.gif                        var movieToUpdate = _db.Movies.First(m => m.ID == id); 
InBlock.gif                        ViewData.Model = movieToUpdate; 
InBlock.gif                         return View(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                [AcceptVerbs(HttpVerbs.Post)] 
InBlock.gif                 public ActionResult Edit(FormCollection form) 
InBlock.gif                { 
InBlock.gif 
InBlock.gif                        var id = Int32.Parse(form[ "id"]); 
InBlock.gif                        var movieToUpdate = _db.Movies.First(m => m.ID == id); 
InBlock.gif                        TryUpdateModel(movieToUpdate,  new  string[] {  "Movie_Name""Realease_Date" }, form.ToValueProvider()); 
InBlock.gif                         if (String.IsNullOrEmpty(movieToUpdate.Movie_Name)) 
InBlock.gif                                ModelState.AddModelError( "Movie_Name""Movie_Name is required!"); 
InBlock.gif                         if (movieToUpdate.Realease_Date ==  null
InBlock.gif                                ModelState.AddModelError( "Realease_Date""Realease_Date is required!"); 
InBlock.gif                         if (ModelState.IsValid) 
InBlock.gif                        { 
InBlock.gif                                _db.SaveChanges(); 
InBlock.gif                                 return RedirectToAction( "Index"); 
InBlock.gif                        } 
InBlock.gif                         return View(movieToUpdate); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 //public ActionResult Delete(int id) 
InBlock.gif                 //{ 
InBlock.gif                 //        try 
InBlock.gif                 //        { 
InBlock.gif                 //                Models.Movie movie = _db.Movies.First(m => m.ID == id); 
InBlock.gif                 //                _db.DeleteObject(movie); 
InBlock.gif                 //                _db.SaveChanges(); 
InBlock.gif                 //                return RedirectToAction("Index"); 
InBlock.gif                 //        } 
InBlock.gif                 //        catch 
InBlock.gif                 //        { 
InBlock.gif                 //                return View("Index"); 
InBlock.gif                 //        } 
InBlock.gif                 //} 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 使用linq 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <returns></returns> 
InBlock.gif                 public ActionResult ShowDB() 
InBlock.gif                { 
InBlock.gif                         string str = System.Configuration.ConfigurationManager.ConnectionStrings[ "MoviesConnectionString"].ToString(); 
InBlock.gif                        DataContext MyDataSource =  new DataContext(str); 
InBlock.gif                        Table<Movies> tb = MyDataSource.GetTable<Movies>(); 
InBlock.gif                        IQueryable<Movies> MyQuery = from movies  in tb where movies.ID >= 5 select movies; 
InBlock.gif                         return View(MyQuery); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 public ActionResult Delete( int id) 
InBlock.gif                { 
InBlock.gif                        DataClasses1DataContext DataC1Context =  new DataClasses1DataContext(); 
InBlock.gif                        Movy mv = DataC1Context.Movies.First(c => c.ID == id); 
InBlock.gif                        DataC1Context.Movies.DeleteOnSubmit(mv); 
InBlock.gif                        DataC1Context.SubmitChanges(); 
InBlock.gif                         return RedirectToRoute( "start"); 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif        [Table(Name =  "Movies")] 
InBlock.gif         public  class Movies 
InBlock.gif        { 
InBlock.gif                 private  int _ID; 
InBlock.gif                 private  string _Movie_Name; 
InBlock.gif                 private DateTime _Realease_Date; 
InBlock.gif                [Column(Storage =  "_ID"
InBlock.gif                AutoSync = AutoSync.OnInsert, 
InBlock.gif                DbType =  "int not null indentity"
InBlock.gif                IsPrimaryKey =  true
InBlock.gif                IsDbGenerated =  true
InBlock.gif                ] 
InBlock.gif                 public  int ID 
InBlock.gif                { 
InBlock.gif                        set { _ID = ID; } 
InBlock.gif                        get {  return  this._ID; } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                [Column(Storage =  "_Movie_Name"
InBlock.gif                        AutoSync = AutoSync.Always, 
InBlock.gif                        DbType =  "varchar(200) not null"
InBlock.gif                        IsDbGenerated =  true 
InBlock.gif                        )] 
InBlock.gif                 public  string Movie_Name 
InBlock.gif                { 
InBlock.gif                        set { _Movie_Name = Movie_Name; } 
InBlock.gif                        get {  return  this._Movie_Name; } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                [Column(Storage =  "_Realease_Date"
InBlock.gif                        AutoSync = AutoSync.Always, 
InBlock.gif                        DbType =  "datetime not null"
InBlock.gif                        IsDbGenerated =  true 
InBlock.gif                        )] 
InBlock.gif 
InBlock.gif                 public DateTime Realease_Date 
InBlock.gif                { 
InBlock.gif                        set { _Realease_Date = Realease_Date; } 
InBlock.gif                        get {  return _Realease_Date; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif 
InBlock.gif}
上述代码咋一看去很郁闷。其实和日常的webForm是一样的。首先在Index上单击右键Create一个View,那么这个action方法Index对应的页面就是你所建的View。ViewData.Model = new MoviesEntities1().Movies.ToList();将一个List数据泛型返回给ViewData。ViewData作用类似于ViewState,只能在特定的一个视图使用。而TempData作用类似于session。但是其在controller中只能传递使用一次,之后就会被销毁。所以上述代码就是向视图页面Index.aspx页面发送一组数据。
InBlock.gif<%@ Page Title= "" Language="C# " MasterPageFile="~/Views/Shared/Site.Master " Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.Movie>>" %> 
InBlock.gif 
InBlock.gif<asp:Content ID= "Content1" ContentPlaceHolderID= "TitleContent" runat= "server"
InBlock.gif        Index 
InBlock.gif</asp:Content> 
InBlock.gif<asp:Content ID= "Content2" ContentPlaceHolderID= "MainContent" runat= "server"
InBlock.gif        <h2> 
InBlock.gif                Index</h2> 
InBlock.gif        <table> 
InBlock.gif                <tr> 
InBlock.gif                        <th> 
InBlock.gif                        </th> 
InBlock.gif                        <th> 
InBlock.gif                                ID 
InBlock.gif                        </th> 
InBlock.gif                        <th> 
InBlock.gif                                Movie_Name 
InBlock.gif                        </th> 
InBlock.gif                        <th> 
InBlock.gif                                Realease_Date 
InBlock.gif                        </th> 
InBlock.gif                </tr> 
InBlock.gif                <%  foreach (var item  in Model) 
InBlock.gif                     { %> 
InBlock.gif                <tr> 
InBlock.gif                        <td> 
InBlock.gif                                <%: item.ID %> 
InBlock.gif                        </td> 
InBlock.gif                        <td> 
InBlock.gif                                <%: item.Movie_Name %> 
InBlock.gif                        </td> 
InBlock.gif                        <td> 
InBlock.gif                                <%: String.Format( "{0:g}", item.Realease_Date) %> 
InBlock.gif                        </td> 
InBlock.gif                        <td> 
InBlock.gif                                <%: Html.ActionLink( "Edit""Edit"new { id=item.ID }) %> 
InBlock.gif                                | 
InBlock.gif                                <%: Html.ActionLink( "Details""Details"new { id=item.ID })%> 
InBlock.gif                                | 
InBlock.gif                                <%: Html.ActionLink( "Delete""Delete"new { id=item.ID })%> 
InBlock.gif                        </td> 
InBlock.gif                </tr> 
InBlock.gif                <% } %> 
InBlock.gif        </table> 
InBlock.gif        <p> 
InBlock.gif                <%: Html.ActionLink( "Create New""Create") %> 
InBlock.gif                <%: Html.ActionLink( "跳转到筛选的页面""ShowDB")%> 
InBlock.gif        </p> 
InBlock.gif</asp:Content>
在这个Html页面,当接收到传过来的数据的时候进行循环遍历,采用HtmlHelper扩展类进行显示。 <%: Html.ActionLink("跳转到筛选的页面", "ShowDB")%>这句的意思是一个超链接,连接到ShowDB这个Action。showDB再调用return view跳转到ShowDb.aspx。
 public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(Models.Movie m){
}
这段代码一个是post方式,另一个是get方式,所谓Get方式即xxx.aspx?id=xx。所以第一个Create所做的动作就是当你点击添加的时候,出现一个添加页面(Create.aspx)而已,仅此而已。第二个post方式的Create才是真正的添加,首先你做个简单的验证。如果验证通过。则调用_db.SaveChanges();在这里需要说明的是Models.Movie m参数的值自动从添加页面可以自动获取。无需写任何代码。对于修改比较特殊,主键不用显示页面view如下
< %@ Page  Title ="" Language="C#"  MasterPageFile ="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Movie >" %> 

< asp:Content  ID ="Content1"  ContentPlaceHolderID ="TitleContent"  runat ="server" > 
        Edit 
</asp:Content> 
< asp:Content  ID ="Content2"  ContentPlaceHolderID ="MainContent"  runat ="server" > 
         < h2 > 
                Edit </h2> 
        <% using (Html.BeginForm()) 
             {%> 
         < %: Html.ValidationSummary(true) % > 
         < fieldset > 
                 < legend >Fields </legend> 
                 < div > 
                         < %: Html.HiddenFor(model = > model.ID)%> 
                 </div> 
                 < div  class ="editor-label" > 
                         < %: Html.LabelFor(model = > model.Movie_Name) %> 
                 </div> 
                 < div  class ="editor-field" > 
                         < %: Html.TextBoxFor(model = > model.Movie_Name) %> 
                         < %: Html.ValidationMessageFor(model = > model.Movie_Name) %> 
                 </div> 
                 < div  class ="editor-label" > 
                         < %: Html.LabelFor(model = > model.Realease_Date) %> 
                 </div> 
                 < div  class ="editor-field" > 
                         < %: Html.TextBoxFor(model = > model.Realease_Date, String.Format("{0:g}", Model.Realease_Date)) %> 
                         < %: Html.ValidationMessageFor(model = > model.Realease_Date) %> 
                 </div> 
                 < p > 
                         < input  type ="submit"  value ="保存"  /> 
                 </p> 
         </fieldset> 
         < % } % > 
         < div > 
                 < %: Html.ActionLink("返回", "Index") % > 
         </div> 
</asp:Content> 
 

本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/318427,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值