0

私のウェブサイトはショッピングサイトであり、ブラウザヘッダーを検出することで、モバイル/デスクトップブラウザ用に自動的にサイズ変更/スタイル変更と配置を行います。

いくつかのものを再配置する1つの例は、ショッピングカートの場所です。

デスクトップブラウザビューでは、ショッピングカートは右側の余白に表示されます。サイトはモバイルブラウザ(つまりiPhone)で狭くなるように設計されているため、モバイルブラウザで表示するときに右側の余白はありません。この場合、代わりにショッピングカートがヘッダーに読み込まれます。

ヘッドとショッピングカートはどちらもユーザーコントロールですが、右側の余白はマスターページに組み込まれているため、ショッピングカートのユーザーコントロールの宣言はマスターページとヘッダーコントロールの両方に存在します。

私のMasterPageの関連するマークアップは次のようになります

<div class="content">
    <div id="leftMargin" runat="server"></div>
    <div id="centre">
       <asp:ContentPlaceHolder id="centreContent" runat="server">/asp:ContentPlaceHolder>
    </div>
    <div id="rightMargin" runat="server">

        <controls:shopping ID="shoppingBasket" runat="server" />

    </div>
</div>

次に、次のようにコードビハインドがあります。

If Common.isMobile() Then
    leftMargin.Visible = False
    rightMargin.Visible = False
End If

コントロールは似ていますHeaderが、完全なdivを非表示にすることを除いて、ユーザーコントロールを非表示にします。

マークアップ:

<div id="miniNav">
    <div id="mobileCart" class="mobileCart insertCart">                    
        <controls:shopping ID="shoppingBasket" runat="server" />
     </div>
     <!--- more buttons --->
</div>

コード:

If Common.isMobile Then
    shoppingBasket.Visible = True
Else
    shoppingBasket.Visible = False
End If

もちろんですが、Common.isMobile機能はモバイルアレンジバージョンを表示するかどうかを決定します。

ですから、長い説明の後、私の実際の質問は非常に単純です。

上記の例では、いずれの場合でもページがレンダリングされると、サーバーは、を使用して非表示にされたすべての非表示要素のコーディング/マークアップ/データベースの相互作用などを完全に無視しますか、htmlControl.display=falseそれともサーバーにこれらすべてのスクリプトを実際に2回実行する必要がありますか?実際には何もしていないので、一度無駄になったことはありますか?

4

1 に答える 1

1

コードは常に実行され、クライアントにレンダリングされません。

パフォーマンスが気になる場合は、ユーザー コントロールをページに追加しないでください。それができない場合は、モバイルの場合は常に追加のロジックを追加して、コストのかかる操作を無視できます。

これを回避する 1 つの "かわいい" 方法は、Visual WebParts に似たパラダイムを使用し、サーバー コントロールを使用してユーザー コントロールをラップすることです。次に、コントロール ラッパーは次のようにします。

public class MyServerControl : WebControl
{
    #region Private Fields
    private const string _ascxPath = @"~/VisualControls/MyUserControl.ascx";
    #endregion

    #region Control Events
    protected override void CreateChildControls()
    {
        if (!Common.IsMobile)
        {
            var control = Page.LoadControl(_ascxPath);
            Controls.Add(this.control);
        }   
    }
    #endregion
}

そして、MyUserControl の代わりに MyServerControl を含めるだけです。

于 2012-08-27T14:27:40.790 に答える