0

Web フォーム サイトにいくつかの折りたたみブロックがあります。次のように、Bootstrap を使用してそれらを折りたたんでいます。

<div class="span<%# CurrentBlock.Span > 0 ? CurrentBlock.Span.ToString() : "12" %> info-link-header info-link-header-title expandable-link-heading" data-toggle="collapse" data-target="#<%# ContentId %>" style="position: relative;">
    <!--some content-->
<div class="expandable-container collapse" id="<%# ContentId %>"><!--some more content--></div>

このファイルの分離コードは次のとおりです。

    protected void Page_Load(object sender, EventArgs e)
    {
        this.DataBind();
        //some other code
    }

DataBind() が呼び出されるので、 <%# ContentId %> コード ブロックが正しい値を取得する必要があると想定します。私が経験している問題は、展開したい div をクリックすると、クラス属性が「折りたたみ」を生成できないことです。「折りたたみ」と表示されるだけなので、Chrome 開発ツールで検査するとコンテンツがレンダリングされます。しかし見えません。Chrome Dev tools に「collapse in」を追加すると問題は解決しますが、もちろん、これを自動的に行う必要があります。さらに紛らわしいのは、これをローカルでビルドすると、ブロックが毎回正しく展開/折りたたまれることです。「崩壊」は必要なときに追加され、必要なときに「崩壊」に戻ります。開発サーバーに公開すると、「折りたたみ」がランダムに生成されません。どうすればこれを修正できますか? ありがとう!

4

1 に答える 1

0

この質問に答えただけです。この背後にある問題は、data-target 属性を含む div が C# プロパティを使用して一意の ID 値を取得していたことです。この値は、DateTime.Now でミリ秒を生成し、それを折りたたみ div の id 属性の値として使用し、一番上の div の data-target の値として使用することによって作成されました。開発サーバーのような自分のマシンよりも高速なマシンでは、コードがページの 2 つまたは 3 つの div で同じミリ秒値を取得するのに十分な速さで実行され、id 属性に同じ値が作成されたと思います。Id 属性の同一の値が DOM を壊し、コンテンツを隠していました。

解決策: GUID オブジェクトを作成して「ContentId」プロパティを設定しました。これにより、id 属性に一意の値が作成され、DOM はそのまま維持されました。

于 2016-07-25T19:33:19.053 に答える