解析ASP.NET Mvc開発の削除修正データ


目次:
1)明源動力から革新工場までの道のり
2)解析ASP.NET WebFormとMvc開発の違い
3)解析ASP.NET Mvcのクエリーデータインスタンス
4)解析ASP.NET Mvc開発のEF遅延ロード
-------------------------------------------------------------------------------------------------------
上のブログではASPについて紹介しています.NET MVCは、EFを使用して、データおよびEF内のDbQuery汎用オブジェクトによるデータの遅延ロードを問い合わせる.今日はEFを使用してデータを削除する方法を見てみましょう.
実は現在のWeb開発で通用するモデルは、フロントエンドがJsとJQueryを使ってバックエンドとデータのインタラクションを行うことです.では、フロントエンドに削除と更新のスクリプトを2つ追加します.コードは次のとおりです.

            @foreach (BlogArticle a in ViewData["DataList"] as List)
            {
                
                    @a.AId
                    @a.ATitle
                    @a.BlogArticleCate.Name
                    @a.Enumeration.e_cname
                    @a.AAddtime
                    >
                      
                
            }

次に、このボタンのJsスクリプト関数を作成します.コードは次のとおりです.

        function del(id) {
            if (confirm("      ?")) {
          <!--            ,js        url  -->
                window.location="/home/del/"+ id;
            }
        }
    

上のJsコードの意味は、ユーザーが削除ボタンをクリックするとurlジャンプのアドレスが「/home/del」+id
クリック前の効果は下図のようで、urlアドレスは
これは,ブラウザがルーティングに従ってコントローラ(Controller)を要求し,コントローラがルーティングの構成に従ってビューメソッドに戻り,Html,Jsなどをブラウザに返そうとすることを意味する.
削除ボタンをクリックして確定し、urlアドレスが
私たちが構成したルーティング情報は「home/del」であることを示します.
そこで、コントローラのHomeControllerにdelメソッドを追加して、削除操作を完了します.コードは以下の通りです.
まず、MVCのデフォルトのルーティングテーブルの構成を見てみましょう.App_Startフォルダの下にあるRouteConfig.cs、コードは以下の通りです.
//     
    public class RouteConfig
    {
                                   
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

urのデフォルト構成モードは「{controller}/{action}/{id}」であることがわかります.
デフォルトの構成情報はdefaults:new{controller="Home"、action="Index"、id=UrlParameter.Optional}
特に注意するのはid=UrlParameter.Optionalはオプションです.
だから私たちはhomeControllerにいるはずです.csでdelタイプのActionメソッドを作成します.コードは次のとおりです.
//    
        public ActionResult Del(int id)
        {
            //       try...catch     
            try
            {
                //      
                BlogArticle artTicle = new BlogArticle();
                artTicle.AId = id;
                //        EF       
                db.BlogArticles.Attach(artTicle);
                //                
                db.BlogArticles.Remove(artTicle);
                //      
                db.SaveChanges();
                //     ,     Index  
                return RedirectToAction("Index", "Home");
            }
            catch (Exception ex)
            {
                return RedirectToAction("    ");
            }
            //return View();
        }

これでデータの削除が完了します.
次に、修正されたコードについて説明します.まず、ビュー(View)コードを次のように示します.

    @using (Html.BeginForm("Modify", "Home", FormMethod.Post))
    {
        
@**@
変更@Html.HiddenFor(a=>a.AId)
タイトル:@Html.TextBox("txtName",(object)Model.ATitle)
@Html.TextBoxFor(a=>a.ATitle)
分類:
@Html.DropDownListFor(a=>a.ACate,ViewBag.CateList as IEnumerable)
内容:
@Html.TextAreaFor(a => a.AContent, 10, 60, null)
@Html.ActionLink(「戻る」,「Index」,「Home」)
}
バックエンドコードはどのように作成されますか?
//      Action     post        ,      
        [HttpGet]
        /// 
        ///         
        /// 
        ///        Id
        /// 
        public ActionResult EditArticle(int id)
        {
            //        ,               
            BlogArticle art = (from c in db.BlogArticles where c.AId == id select c).FirstOrDefault();
                     
            //                ,   DropList 

次に、変更を実行するコードを示します.
[HttpPost]
        /// 
        ///        
        /// 
        /// 
        /// 
        public ActionResult Modify(BlogArticle model)
        {
            try
            {
                //1.      a.   EF      ,  b.         
                DbEntityEntry entry = db.Entry(model);
                //2.             unchanged
                entry.State = System.Data.EntityState.Unchanged;
                //3.         
                entry.Property(a => a.ATitle).IsModified = true;
                entry.Property(a => a.AContent).IsModified = true;
                entry.Property(a => a.ACate).IsModified = true;
                //4.           
                db.SaveChanges();
                //5.    ,             /Home/List   
                return RedirectToAction("Index", "Home");
            }
            catch (Exception ex)
            {
                return Content("    ~~~" + ex.Message);
            }
        }

これでMVCを使用して小さなサイトを構築するタスクを完了し、データの削除と変更の操作も完了しました.
本シリーズの文章に対して貴重な意見を提出することを歓迎します.