none
[ASP.NET MVC] 資料表明明有關連為什麼無法呼叫相關資料表的欄位 RRS feed

  • 問題

  • User,coupon,couponFavorite三張資料表的關聯是這樣子的:User被b參考,coupon被couponFavorite參考

    我有一張(Partial)View剛好需要使用這三張資料的一些欄位

    我以coupon為這張(Partial)View的Model,可是呼叫User的欄位都沒有問題,但呼叫couponFavorite的欄位時卻老是沒出現欄位給我選

    請問我該怎麼解決這個問題?

    附上該(Partial)View:

    @model IEnumerable<final.Models.coupon>
    
    @foreach (var couponF in Model)
    {
        <!--收藏狀態有效(1)並且收藏者是登入狀態-->
        <!--.couponCollectstatus和.consumerMail會一直有紅線,提示訊息說沒有定義找不到-->
        if(couponF.couponFavorite.couponCollectstatus == 1 && couponF.couponFavorite.consumerMail.Equals("a830704b@gmail.com"))
        {
            <div class="col-md-3">
                <div class="panel panel-success">
                    <div class="panel-heading">
                        <center>
                            <h4>
                                <!--店家名稱-->
                                @couponF.User.userName
                            </h4>
                        </center>
                    </div>
                    <div class="panel-body">
                        <center>
                            <!--優惠券圖片-->
                            @*
                                <!--<img src="@Url.Action("image", "Favorite", new { id = couponFavorite.couponID })" />-->
                            *@
                        </center>
                        <div class="text">
                            <!--優惠券使用期限-->
                            <p>使用期限:@couponF.maturityDate</p>
                            <!--店家地址-->
                            <p>地址:@couponF.User.userAddress</p>
                        </div>
                        <div class="pull-right">
                            <p>
                                <i class=" btn btn-warning glyphicon glyphicon-zoom-in" title="放大">
                                    <!--檢視QRcode-->
                                </i>
                                <i class=" btn btn-primary glyphicon glyphicon-download-alt" title="下載">
                                    <!--下載QRcode-->
                                </i>
                                <i class=" btn btn-danger glyphicon glyphicon-trash" title="刪除"
                                   onclick="location.href='@Url.Action("deleteCouponFavorite", "Favorite", new { id = couponF.couponID })'"></i>
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        }
    }

    後來我把(Partial)View最上面的model從coupon改成couponFavorite後問題其實就解決了

    但我還是想問一下為什麼我不能用coupon來當中繼站

    • 已編輯 Didia LIN 2015年9月8日 下午 01:41 補述
    2015年9月8日 上午 10:16

解答

所有回覆

  • 您可以考慮將三張資料表中要給PartialView用的欄位建立成ViewModel供PartialView使用


    • 已編輯 tihsMVP 2015年9月9日 上午 02:06
    2015年9月9日 上午 02:05
  • 在有好好拉關聯的情況下明明就可以直接呼叫到的東西,我當然不會選擇另外寫一個viewModel阿-w-

    我現在就是想問為什麼coupon當作那張(partial)view的主要model無法呼叫couponFavorite的欄位

    但是換成以couponFavorite當作主要model就通通都可以了?

    我自己有個推測:因為couponFavorite是三個之中的最底層的參考所以上面的通通可以叫到

    有點像是子類別可以呼叫所有父類別的function的概念?

    2015年9月9日 上午 04:41
  • 製作ViewModel可以得到安全性的好處, 如果不想製作ViewModel, 可以參考這篇文件的做法:Multiple Models in a View in ASP.NET MVC 4 / MVC 5

    • 已標示為解答 Didia LIN 2015年9月11日 上午 07:05
    2015年9月10日 上午 04:15
  • 我想你這邊的參考指的是繼承?

    如果是這樣的話, 你已經跟View說我這邊的類別是父類別

    如此一來就不能使用到子類別公開的property, field, method...

    但是你依然還是可以在view中判斷這個資料是不是父類別, 如果是的話在操作其屬性

    @model IEnumerable<final.Models.coupon>
    
    @foreach (var couponF in Model)
    {
        if (couponF is final.Models.couponFavorite) {
            <div>customerMail : @((couponF  as final.Models.couponFavoraite).customerMail )</div>
        }
    }

    但是如果這張View只是couponFavorite用, 不如就定義model為 IEnumerable<final.Models.couponFavorite> 吧:-)

    2015年9月11日 上午 06:45
  • 雖然跟期望的答案有出入,不過這個參考文件讓我看到了更多的傳model方法

    謝謝你了

    2015年9月11日 上午 07:07