忍者ブログ
[211]  [210]  [209]  [203]  [207]  [205]  [204]  [196]  [193]  [190]  [189
×

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

・色々なサンプルを見ているとmodelとViewが対をなしているように感じた

業務では、売上を例に取ると
・売上テーブル
 取引先コード、日付け、番号、商品コード、数単金
・取引先テーブル
 取引先コード、取引先名
・商品テーブル
 商品コード、商品名

どうするのか
・1対1と思い込んでいたので
 以下のモデルを作った
・売上詳細テーブル
 取引先コード、取引先名、日付け、番号、商品コード、商品名、数単金

これでビューを自動生成し、コントローラに組みこんだ

query = "SELECT a.id,a.name,a.price,a.cateid,b.name as catename "
                   + " FROM TProduct a "
                   + " inner join TCategory b on( a.cateid = b.id)"
                   + "ORDER BY a.id";
       




不便な仕様だと思っていたが
・モデルにNをセットできる方法があった
  TProductとTProductDetail の二つのモデルを扱う場合を例にすると
 
新たにモデル内にクラスを作成する
    public class ProductItemModel
    {
        public TProduct Product { get; set; }
        public TProductDetail ProductDetail { get; set; }
    }


・ビューを作成するが、なぜか自動生成はエラーになるので
空のビューを作成する

@model MvcShopping2.Models.ProductItemModel 
 XXXXXXXXXXXXXXXXXXXXXXXX
<div>
    <h4>ProductItemModel </h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Product.id)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Product.id )
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Product.price)
        </dt>
なんの事はない、modelの後に
 Product. または ProductDetailをつければOK

例によってビルドをお忘れ無く


・コントローラーは
        public ActionResult Details2(string id)
        {
            ProductItemModel model = new ProductItemModel();
            string query = "";
            query = "SELECT a.id,a.name,a.price,a.cateid "
                  + " FROM TProduct a "
                  + " WHERE a.id = " + "'" + id + "'";
            model.Product = db.Database.SqlQuery<TProduct>(query).Single();
         
            query = "SELECT a.id,a.description "
                  + " FROM TProductDetail a "
                  + " WHERE a.id = " + "'" + id + "'";
            model.ProductDetail = db.Database.SqlQuery<TProductDetail>(query).Single();
            return View(model);
        }

・商品コード等は
string str = model.Product.cateid.ToString(); 
等々で、読み出してつかえばいい

・旧来のように
データを読み出してVIEWに手動でセットする方法も
使えますね

拍手

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]