0

asp.net webapps の 1 つのフォームに表示される次の html をデザイン エージェンシーから受け取りました。

<label>
    <input type="radio" />
    Label Text 1
</label>

<label>
    <input type="radio" />
    Label Text 2
</label>

<label>
    <input type="radio" />
    Label Text 3
</label>

作成された出力では、ラベル テキストの左側にラジオ ボタンが配置されることが想像できます。

ラベル/ラジオ ボタンの数は可変であるため、RadioButtonList を使用して、追加されたコントロールの数を動的に操作することにしました。

RadioButtonList の問題は、それによって生成される html があまり柔軟でないことです。私の顧客が望むレイアウトに最も近いものは、次のコードです。ただし、これにより、ラジオ ボタンがラベルの右側に配置されます。:(

    <asp:RadioButtonList ID="DayOfWeekRadioButtonList" runat="server" RepeatLayout="Flow" RepeatDirection="Vertical" TextAlign="Left">
    </asp:RadioButtonList>

生成された HTML は次のとおりです。

<label for="ControlID1">Text 1</label>
<input id="RadioControlID1" type="radio" name="NameRadioControlID1" value="Text 1" />

<label for="ControlID2">Text 2</label>
<input id="RadioControlID2" type="radio" name="NameRadioControlID2" value="Text 2" />

<label for="ControlID3">Text 3</label>
<input id="RadioControlID3" type="radio" name="NameRadioControlID3" value="Text 3" />

入力コントロールをラベル内に配置することは可能ですか?

4

2 に答える 2

1

動作をオーバーライドするカスタムコントロールを作成しないと、説明したとおりにRadioButtonListコントロールでラベル内のボタンをレンダリングすることはできません。

wompが述べたように、「Left」の代わりにTextAlign = "Right"を設定する必要があります。または、その属性を空白のままにすると、デフォルトで期待される動作になります。「右」に設定すると、「テキストをラジオボタンのに揃える」ことを意味します。「左」とは逆です。

カスタムコントロールを作成する代わりに、通常のラベルとRadioButtonコントロールを使用して目的の出力を取得できますが、GroupNameを関連付けて、各ボタンを個別にチェックする必要があります。これは、それらをPanelコントロールに配置し、それらをループして、どちらが選択されているかを判別することで強化できます。

それはより多くのマークアップですが、あなたが言及したフォーマットと一致します:

<label>
  <asp:RadioButton ID="rbMonday" runat="server" GroupName="DaysOfWeek" />
  Monday
</label>

率直に言って、マークアップは追加の機能を提供しないため、重要ではありません。最終的には入力をキャプチャする必要があり、ラベルにラジオボタンが含まれているかどうかは、その目標に影響しません。あなたが扱っているエージェンシーが柔軟であるなら、あなたはさまざまなオプションを説明することができ、おそらくそれらはデフォルトのフォーマットを受け入れるでしょう、それはあなたをより生産的にしそしてあなたがこれに費やす時間を減らすことを可能にします(それは順番にそれらを作るはずですより幸せ)。

于 2009-09-06T19:23:01.913 に答える
0

プロパティTextAlignは「左」に設定されています。これは、テキストがボタンの左側に配置されることを意味します。私はそれを設定すると、あなたが望むことをTextAlign = "Right"行うべきだと信じています。

于 2009-09-06T18:59:12.510 に答える