忍者ブログ
[35]  [36]  [37]  [38]  [39]  [40]  [41]  [42]  [43]  [44]  [45
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

・初級編で色々とテストをしてみた
結果、完成したのが


やっとそれらしく動作するようになった

まったく自動でも同じような画面ができるのがすごい所だが
やはり
1.業務アプリという事を考えるとSQLを直接記述したいのと
2.SQL側でテーブル相互間のリンクを指定するのに抵抗がある
3.マルチキーを持った時の自動化の問題

なので、自動生成をそのまま利用するのは業務用途としては
難しいが使える所は使っている

ソースは次回以降の中級編で公開するが、
NETや本のサンプルとは違っている

VS2010では「一目でわかるシリーズMVC編」を参考にしたが
VS2013のMVC5とは違いが結構大きいというかサンプルデータ
ベース以外は、途中から使えなかった。
、マイクロソフトさんのサイトには著者がC#からVB版を載せて
いるのと一部MVC5を載せているが是非MVC5版を販売して欲しい

山田氏のMVC5 APSNETだが、便利な機能から入っているので
私には、逆に解り難かった。
洋書のMVC5PROシリーズは空のプロジェクトから始めて
おり、これを併読するとやっと理解できた。

しかしMVC5は情報がなさ過ぎる。
昔はやった「10日でできるXXX」シリーズのような解説書が
あればいいのに、、、

果たして、C#+MVCがどうなるのか、、、



ところで「日経XXXXX」という言語系の月刊誌がある。

特集が「C#とJAVA」でして、教務深く読ましていただいたが
C#についてWEBがSilverligtが廃止されるので△という評価であった

この著者はMVCもWEBフォームも知らないのだろうか

参考図書とHP

なお下記の本三冊をベースに進めた。

ASP.NETMVCは入門というよりは便利な機能からスタートして
いるのでベースの知識がなかれば逆に解りにくい、
ただ今発行されている唯一の参考書なので必読の書である

ProASP.NETMVC5が空画面からスタートしており解りやすかった


一目でわかるは、入門者にはぴったりだが残念ながらmvc2
+C#なので、かなり中身がMVC5と違っており、MVC5版が
待ち遠しい。MVC5版があれば間違い無く売れますよ、、、



ネットだが
MSのASP.NET MVCアプリケーション開発入門が参考になった
一目でわかるをベースにしており、これはこれで参考になった

兎に角、日本語の情報がなさ過ぎる

C#だが
VS2015以降、WIndowsならずandroidにIOSまでC#対応を
うたっており、これからの主流はC#になりそうである

幸いVBとJavaの両方使っているのでC#は、スラスラ書けたが
VBからの移行組は苦労するかもしれない。








拍手

PR
・世の中、私と同じ考え方の人がいるんだ



日本の製造業が、駄目になっている原因の本質を突いている本!


Lineの成功者だけに説得力があるし、LINEのCEOを退任して
成功にしがみついていないのがすばらしい

MVCがユーザに幸せを与える事になるのか
MSの技術者の独りよがりか、、、、

たしかにMVCの概念や自動生成は一見すばらしいが、
実際の業務の現場を知らない技術者が開発したとしか思えないのが事実








拍手

・ルーティングのお勉強
・SQLダイレクト C#
・LINQ VB
・ViewのList表示の幅とラベル名の小技少々

一目でわかる「ASP.NET MVC アプリケーション開発入門」(日経BP)を
VS2013に変更している。MSDNにも補足があるが、VS2010版でMVC5とは
互換性がない。備忘録+改造を色々として見た。

早く2013 mvc5対応版を出して欲しい>>日経BPさん



・ルーティングのお勉強

http://localhost/home/index/2
 コントローラー/アクション/パラメータ

これを利用して、サンプルとして


カテゴリ別の表示を作ってみた。(表示はカテゴリで選択)

 public ActionResult Index(int? id)

素直にidとすればいいものをcatidとすると何をしてもnullになる。

AppStartのRouteConfig内で受けている訳だが

     routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

何の事はないidで受けており、idだとパラメータとして判断していない

ああ疲れた。
・C#では
        public ActionResult Index(int? id) ?はNULLもOK
        {
           string query = ""; SQL文の記載用
            if (id == null)
            {
                id = 0;
            }
            if (id == 0)
            {
                 query = "SELECT a.id,a.name,a.price,a.cateid "
                         + " FROM TProduct a "
                         + "ORDER BY a.id";
            }
            else
            {
                 query = "SELECT  a.id,a.name,a.price,a.cateid "
                         + " FROM TProduct a "
                         + " WHERE cateid = " + id
                         + "ORDER BY a.id";
            }
            var tpc = db.Database.SqlQuery<TProduct>(query); データの読み出し
   カテゴリが登録されているか?
            query = "SELECT * FROM TCategory WHERE id = " + id;
            var cnt = db.Database.SqlQuery<TCategory>(query).Count();
            if (cnt > 0)
            {
                var tpc2 = db.Database.SqlQuery<TCategory>(query).First();
                string cname = tpc2.name; <<Firstと変換がミソ>> 
                ViewBag.cname = cname;
            }
            
            return View(tpc);
        }

・VBではLINQで作成してみた

        Function  index(Optional ByVal id As Integer = -1) As ActionResult
            If id = -1 Then
                ' カテゴリを指定しなかった場合 
                ViewData("ErrorMessage") = "カテゴリIDを指定してください"
                Return View("Error")
            End If
            Dim ent As New mvcdbEntities
            ' カテゴリ名称を取得 
            Dim count = (From c In ent.TCategory
                        Where c.id = id
                        Select c.name).Count
            If count = 0 Then
                ' カテゴリIDが範囲を超えている場合 
                ViewData("ErrorMessage") =
                    String.Format("カテゴリID({0})が正しくありません", id)
                Return View("Error")
            End If
            ' 指定したカテゴリ内の商品を取得 
            Dim model = From t In ent.TProduct
                                Where t.cateid = id
                               Select t
            ' カテゴリ名称を取得 
            Dim cname = (From c In ent.TCategory
                               Where c.id = id
                               Select c.name).Single
            ' ViewData に保存 
            ViewData("CategoryName") = cname
            Return View(model)
        End Function


・ついでにVIEWの表示ですが幅が狭くなったので
  モデルに幅を定義
  [StringLength(5)]
        public string id { get; set; }
        [Required]
        [StringLength(50)]
        public string name { get; set; }


・ついでに名称のセットは
   [Display(Name = "名前")]
        public string name { get; set; }
        [Display(Name = "価格")]
        public int price { get; set; }
        [Display(Name = "カテゴリー")]
        public int cateid { get; set; }


・直接Viewにこの記載方法でも可

         @Html.Label("名  前")
         @Html.Label("価  格")
         @Html.Label("カテゴリ")

          



   
        

拍手

MVC5入門 その16 一目でわかるASP.NET MVCアプリケーション開発入門 No3

MSDNとMVC5の比較

----------------------------
・index
MSDNのサンプル(SP)
    Function Index() As ActionResult
            Dim ent As New mvcdbEntities
            Dim model = ent.TProduct
            Return View(model)
    End Function
    --------------------------------
MVC5の自動生成(Auto)
 Private db As New mvcdbEntities
        ' GET: admin
        Function Index() As ActionResult
            Return View(db.TProduct.ToList())
        End Function
---------------------------
・Create
MSDNのサンプル(SP)
         Function Create() As ActionResult
            Dim ent As New mvcdbEntities
            Dim model = New TProduct
            Return View(model)
        End Function
        ' POST: admin/Create
        '過多ポスティング攻撃を防止するには、バインド先とする特定のプロパティを有効にしてください。
        '詳細については、http://go.microsoft.com/fwlink/?LinkId=317598 を参照してください。
        <HttpPost()>
        <ValidateAntiForgeryToken()>
        Function Create(ByVal collection As FormCollection) As ActionResult
            Try
                Dim ent As New mvcdbEntities
                ' 新しい商品を作成 
                Dim model = New TProduct
                ' 列の設定をする 
                model.id = collection("id")
                model.name = collection("name")
                model.price = Integer.Parse(collection("price"))
                model.cateid = Integer.Parse(collection("cateid"))
                ' テーブルに追加する 
                ' ent.AddToTProduct(model)  <==ここはエラーになる
                ent.TProduct.Add(model)
                ' 更新処理 
                ent.SaveChanges()
                Return RedirectToAction("Index")
            Catch
                Return View()
            End Try
        End Function
   -----------------------------------------------------------------------
MVC5の自動生成(Auto)
        Function Create() As ActionResult
            Return View()
        End Function
        <HttpPost()>
        <ValidateAntiForgeryToken()>
        Function Create(<Bind(Include:="id,name,price")> ByVal tProduct As TProduct) As ActionResult
            If ModelState.IsValid Then
                db.TProduct.Add(tProduct)
                db.SaveChanges()
                Return RedirectToAction("Index")
            End If
            Return View(tProduct)
        End Function

  これは自動生成よりSPの方が解りやすい
---------------------------
・Edit
MSDNのサンプル(SP)

        Function Edit(ByVal id As String) As ActionResult
            Dim ent = New mvcdbEntities
            Dim model = ent.TProduct.Where(
                Function(m) m.id = id).Single()
            Return View(model)
        End Function
        ' 
        ' POST: /Admin/Edit/5 
        <HttpPost()>
        <ValidateAntiForgeryToken()>
        Function Edit(ByVal id As String, ByVal collection As FormCollection) As ActionResult
            If IsNothing(id) Then
                Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
            End If
            Try
                Dim ent As New mvcdbEntities
                ' 指定した商品 ID で検索する 
                Dim model = ent.TProduct.Where(Function(m) m.id = id).Single()
                ' 商品名と価格を変更する 
                model.name = collection("name")
                model.price = Integer.Parse(collection("price"))
                ' データベースを更新する 
                ent.SaveChanges()
                Return RedirectToAction("Index")
            Catch
                Return View()
            End Try
        End Function
  --------------------------------------------------------------
MVC5の自動生成(Auto)
        Function Edit(ByVal id As String) As ActionResult
            If IsNothing(id) Then
                Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
            End If
            Dim tProduct As TProduct = db.TProduct.Find(id)
            If IsNothing(tProduct) Then
                Return HttpNotFound()
            End If
            Return View(tProduct)
        End Function
        <HttpPost()>
        <ValidateAntiForgeryToken()>
        Function Edit(<Bind(Include:="id,name,price")> ByVal tProduct As TProduct) As ActionResult
            If ModelState.IsValid Then
                db.Entry(tProduct).State = EntityState.Modified
                db.SaveChanges()
                Return RedirectToAction("Index")
            End If
            Return View(tProduct)
        End Function
------------------------
MSDNのサンプルでカテゴリの表示選択とエラー表示をテスト

これもかなり違っている
・以下を adminControllerクラスに追加
        Function Category(ByVal id As Integer) As ActionResult
            Dim ent As New mvcdbEntities
            ' 指定したカテゴリ内の商品を取得 
            Dim model = From t In ent.TProduct
                        Where t.cateid = id
                        Select t
            ' カテゴリ名称を取得 
            Dim cname = (From c In ent.TCategory
                        Where c.id = id
                        Select c.name).Single
            ' ViewData に保存 
            ViewData("CategoryName") = cname
            Return View(model)
        End Function
・ビューを追加 admin内に
Category



 ViewData("CategoryName") にViewに@ViewDataを追加



実行すると


http://localhost:xxxxx/admin/Category/1とパラメータの1を入力しなかった時の対応

        Function Category(Optional ByVal id As Integer = -1) As ActionResult
            If id = -1 Then
                ' カテゴリを指定しなかった場合 
                ViewData("ErrorMessage") = "カテゴリIDを指定してください"
                Return View("Error")
            End If
            Dim ent As New mvcdbEntities
            ' カテゴリ名称を取得 
            Dim count = (From c In ent.TCategory
                        Where c.id = id
                        Select c.name).Count
            If count = 0 Then
                ' カテゴリIDが範囲を超えている場合 
                ViewData("ErrorMessage") =
                    String.Format("カテゴリID({0})が正しくありません", id)
                Return View("Error")
            End If
            ' 指定したカテゴリ内の商品を取得 
            Dim model = From t In ent.TProduct
                        Where t.cateid = id
                        Select t
            ' カテゴリ名称を取得 
            Dim cname = (From c In ent.TCategory
                        Where c.id = id
                        Select c.name).Single
            ' ViewData に保存 
            ViewData("CategoryName") = cname

            Return View(model)
        End 
ここでErrorのviewはサンプルでは自分で作成となっているが
VB2013ではSHARED内にErrorがすでに出来ているので

error内に@ViewData("
ErrorMessage")を追加


・http://localhost:xxxxx/admin/Category/と入力すると






拍手

MVC5入門 その16 一目でわかるASP.NET MVCアプリケーション開発入門 No2

・まずは新規プロジェクトの作成
VBで実行したはC#をお奨めします。(ネット上のサンプルはほとんどC#)




ASP.NET WEBアプリケーションを選択



テンプレートはMVC

・ADO.NET Entity Frameworkでモデルをデータベースから作成
モデルでミグクリック >> 追加 >> 新しい項目の追加



ADO.NET Entity DataModelを選択
モデル名は
MvcModel1



データベースからEFDesignerを選択 (ちなみにCodeFirstならこれからの作業をすべてやってくれる)



この辺りはSQLServerの知識が必要です

次に文字列をWEB.CONFIGに含むかどうか聞いて来るが
ここでは「はい」
接続名 mvcdbEntities



テーブルにチェックを入れ
モデル名 mvcdbModelで完了



これでモデルの出来上がり


 ここで必ずリビルドを実施

・次にコントローラ
コントローラで右クリック >> コントローラーの追加




Entity FrameWorkを使用した、、、を選択



モデルクラス TProduct
データコンテキストクラス mvcdbEntities
adminControllerで作成

エラーになる?

モデル作成後にリビルドを忘れているから、、、



MSDNのサンプルではVIEWでIndexの作成となるが
MVC5ではすでに作成されている

http://localhost:ポート名/adminで実行すると



表示した
editを押すとちゃんと遷移、、、



次はコントロールするコードを確認する

拍手

カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新CM
[03/10 DORA]
最新TB
プロフィール
HN:
dorabu
性別:
非公開
バーコード
ブログ内検索
P R
Copyright © ドラブーのアンドロイドとIoTなブログ All rights reserved. / Template by 四季. / Material by てんせん.

忍者ブログ [PR]