0

レスポンシブ Web サイトに MVC を使用する場合は、次のとおりです。

私は主に ASP.NET WebForms であるサイトに取り組んでおり、レスポンシブ マークアップを使用するように再設計中です。すべてを MVC に変換するのは現実的ではないため、既存のコントロールで間に合わせる必要があります。

特定のフォーム ページで、同じ行に 2 つのコンボ ボックスがあります。48%これらには、親要素の幅を指定するように適切に設定された CSS クラスがあります。問題は、asp:DropDownListを使用しているため、CSS クラスで設定された幅をオーバーライドするstyleを持つ属性でコントロールがレンダリングされることです。width:275px;

これらの DropDownLists (特にRenderChildrenメソッド オーバーライド)を含む複合コントロールの分離コードで[control].Style.Clear();、基本メソッドを呼び出す前に呼び出しを試みました。これは効果がありません。追加しても:

[control].Style.Add(HtmlTextWriterStyle.Width, "inherit");

要素は次のようにレンダリングされます。

<select style="width:275px;width:inherit;" class="input-half first" id="longAndComplicated" name="longAndComplicated">

2 つの宣言に注意してください。理想的には、最初から属性widthが存在しないようにする必要があります。style

ソースでReflectorを突き刺しましたが、このハードコーディングされた幅がどこに設定されているかを見つけることができませんでした。スタイル セッターは、ASP.NET 階層のさらに上のどこかからコピーされているようです。

幸運な推測として、私は試しました:

  • Widthで空の文字列に設定すると<asp:DropDownList>(「継承」により解析エラーが発生します)
  • 明示的に指定するWidth="48%"
  • 設定EnableTheming="false"

これらのいずれもプラスの効果はなく、renderedstyle属性にはまだwidth:275px;.

この幅は魔法のようにどこから設定されていますか? 理想的には、から継承する派生クラスを作成することなく、この動作をオーバーライドするにはどうすればよいSystem.Web.UI.WebControls.DropDownListですか?

どうもありがとう。

4

2 に答える 2

0

ドー - 私はそれが何であるかを理解しました。

DropDown1Width含まれる複合コントロールは、との線に沿ってプロパティを定義したことがわかりますDropDown2Width。これらは、メソッド中に使用された基になるコントロールのWidthプロパティを「巧妙に」設定します。DropDownListDropDownList.Render()

幸いなことに、サブクラス化する必要はありませんがDropDownList、後から考えると、決定的な Web 検索結果がないことから、問題は私たち自身のコードベースのどこかにある可能性が高いことが示唆されました。

これらの冗長なプロパティ (およびさまざまな ASPX ファイル内の対応する割り当て) を削除したので、「定義済み」と言います。

于 2013-05-15T06:21:27.860 に答える
0

親から幅を継承し、 width:275px; で定義された幅要素をオーバーライドするため、幅を修正し、幅を継承しません。その意味は少なくなります。

フィドルを作成しました。クロムで正常に動作し、選択タグの幅は固定されています。

サブ要素のサイズが大きくなると、自動的に大きくなります。

チェックしてくださいfiddle

あなたの質問がCSSクラスを参照している場合class="input-half first"、要素スタイルで定義されたスタイルは最後に適用されるものであり、クラスと比較して優先度が高く、より良い新しいクラスを作成して割り当てます.

あなたがASP.netコントロールに関して多くのことを書いているので、私は正しい文脈で答えましたが、ほとんどの場合、それが問題になるとは思いません。

于 2013-05-14T03:55:01.623 に答える