2010-02-11 14 views
9

Używam poniższy kod wewnątrz tabeli:Dlaczego asp: DropDownList i asp: TextBox o tej samej szerokości wyglądać inaczej

<tr> 
    <td>User Language:</td> 
    <td> 
     <asp:DropDownList ID="Language" runat="server" Width="200px"> 
      <asp:ListItem Selected="True">English</asp:ListItem> 
     </asp:DropDownList> 
    </td> 
</tr> 
<tr> 
    <td><span class="important">*</span>Company:</td> 
    <td><asp:TextBox ID="Company" runat="server" width="200px" /></td> 
</tr> 

Gdy na miejscu pojawia się kod kontroli <asp:Textbox> jest 205px i <asp:DropDownList> ma szerokość 200 pikseli. Co to powoduje? Oba mają szerokość 200 pikseli.

+0

Jaka przeglądarka? Firefox? – SLaks

Odpowiedz

18

Ponieważ pole tekstowe ma 2 piksele i 1 pikę dopełnienia po bokach.

+0

To jest poprawna odpowiedź. – SLaks

+0

Przepraszam, korzystam z Google Chrome (wersja: 59.0.3071.86). Kiedy sprawdzam stronę, mówi ona, że ​​szerokość pola tekstowego wynosi ** 4px ** więcej (204px) niż wartość DropDownList (200px). (A więc nawet 2px + 1px to 3px, wciąż 1px krótki!) – user3454439

1

Rozmiar DropDown zmienia się w zależności od opcji w nim podanych. Tak więc, jeśli masz dłuższe opcje, otrzymasz dłuższy spadek. Dodatkowo zajmuje więcej miejsca dla strzałki, która jest prawym rogiem.

0

Po wstawieniu danych na listę rozwijaną zmienia rozmiar, jeśli nie zostanie ustawiona właściwość width, ale jeśli ustawisz szerokość, nie zostanie ona zmieniona.

1

Niekoniecznie związane, ale oto szybkie wskazówka, która pozwoli Ci zaoszczędzić sporo bólu głowy w dół drogi:

Nigdy wykorzystać ASP: tekstowe lub ASP: DropDownList

< tekstowe runat = server> i < wybierz runat = server> będzie działać w każdym pojedynczym przypadku, jaki kiedykolwiek będziesz potrzebował, i nie dodają żadnych mylących właściwości, takich jak "szerokość", które nie działają poprawnie.

Używaj prawdziwych znaczników HTML z klasami CSS do wszystkiego, co robisz, i dodawaj tylko runat = server do tych, z którymi faktycznie chcesz zadzierać z zaplecza.

+0

Czy to dobra rada? Musi istnieć jakiś powód, dla którego te kontrole istnieją. Czy potrafisz databindować pola tekstowe HTML i listy rozwijane? –

+1

Są one częściowo spójne, ale przede wszystkim wspierają wczesny pomysł ASP.NET na przeciąganie i upuszczanie formularzy internetowych. Ludzie mądrze unikają przeciągania i upuszczania swojej drogi do niezniszczalnego kodu, ale czasami zapominają, że każdy znacznik HTML obsługuje runat = server i dlatego nie muszą używać asp: equivilants. –

+0

Tak, w odpowiedzi na twoje pytanie, przekonasz się, że HtmlSelect ma właściwość .DataSource i .DataBind() oraz członków Text i Value. –