忍者ブログ
[203]  [207]  [205]  [204]  [196]  [193]  [190]  [189]  [188]  [179]  [178
×

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

・ルーティングのお勉強
・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("カテゴリ")

          



   
        

拍手

PR
カレンダー
04 2025/05 06
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 31
フリーエリア
最新CM
[03/10 DORA]
最新TB
プロフィール
HN:
dorabu
性別:
非公開
バーコード
ブログ内検索
P R
Copyright © ドラブーのアンドロイドとIoTなブログ All rights reserved. / Template by 四季. / Material by てんせん.

忍者ブログ [PR]