2012-03-05 47 views
34

Tôi đang làm việc trên một dự án cũ được viết và sau đó được vá bởi nhiều người trong những năm qua. Tại một số nơi họ đã sử dụng tài sản SelectedValue và những nơi khác mà họ đã sử dụng SelectedItem.Value.SelectedValue vs SelectedItem.Value of DropDownList

Câu hỏi:SelectedValue chỉ là một cú pháp đường cho SelectedItem.Value hoặc SelectedValue hoạt động khác nhau dưới mui xe? Cái nào hoạt động tốt hơn?

Edit: SelectedItem.Text được thay thế bằng SelectedItem.Value

Trả lời

46

SelectedValue trả về cùng giá trị như SelectedItem.Value.

SelectedItem.ValueSelectedItem.Text có thể có giá trị khác nhau và hiệu suất không phải là yếu tố ở đây, chỉ ý nghĩa của các thuộc tính này quan trọng.

<asp:DropDownList runat="server" ID="ddlUserTypes"> 
    <asp:ListItem Text="Admins" Value="1" Selected="true" /> 
    <asp:ListItem Text="Users" Value="2"/> 
</asp:DropDownList> 

Ở đây, ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue và cả hai sẽ trả về giá trị "1".

ddlUserTypes.SelectedItem.Text sẽ trở về "Quản trị viên", mà là khác nhau từ ddlUserTypes.SelectedValue

chỉnh sửa

dưới mui xe, SelectedValue trông như thế này

public virtual string SelectedValue 
{ 
    get 
    { 
     int selectedIndex = this.SelectedIndex; 
     if (selectedIndex >= 0) 
     { 
      return this.Items[selectedIndex].Value; 
     } 
     return string.Empty; 
    } 
} 

và SelectedItem trông như thế này:

public virtual ListItem SelectedItem 
{ 
    get 
    { 
     int selectedIndex = this.SelectedIndex; 
     if (selectedIndex >= 0) 
     { 
      return this.Items[selectedIndex]; 
     } 
     return null; 
    } 
} 

Một khác biệt lớn giữa hai thuộc tính này là SelectedValue cũng có setter cũng vậy, vì SelectedItem thì không. Số getter của SelectedValue nhanh hơn khi viết mã và vấn đề về hiệu suất thực thi không có lý do thực sự nào để được thảo luận. Một lợi thế lớn của SelectedValue là khi sử dụng các biểu thức Binding.

chỉnh sửa dữ liệu ràng buộc kịch bản (bạn không thể sử dụng SelectedItem.Value)

<asp:Repeater runat="server"> 
<ItemTemplate> 
    <asp:DropDownList ID="ddlCategories" runat="server" 
         SelectedValue='<%# Eval("CategoryId")'> 
    </asp:DropDownList> 
</ItemTemplate> 
</asp:Repeater> 
+0

Cảm ơn bạn đã chỉ cho tôi .. Tôi đã nhập nhầm .Text .. thực sự .Value đang được sử dụng ở khắp mọi nơi. Vì vậy, việc thực hiện bên trong của cả hai thuộc tính (SelectedItem.Value & SelectedValue) là như nhau? Cú pháp SelectedItem (hai dấu chấm) có phức tạp hơn so với SelectValue một-hop-away không? –

+0

Cảm ơn bạn Adrian. Bạn có thể chi tiết về lợi thế biểu thức Binding không? Sẽ rất có nghĩa vụ! –

+0

@vulcanraven, chào mừng, tôi đã cập nhật câu trả lời bằng ví dụ về dữ liệu –

0

Trong danh sách droupDown có hai mục thêm tài sản.

1) Text 2) giá trị

Nếu bạn muốn để có được tài sản văn bản sau đó u sử dụng selecteditem.text

và Nếu bạn muốn chọn giá trị tài sản sau đó sử dụng tài sản

SelectedValue Trong của bạn trường hợp tôi điều cả giá trị và thuộc tính văn bản đều giống nhau, cho dù bạn sử dụng selectedvalue hay selecteditem.text

Nếu cả hai khác nhau thì chúng cho chúng ta kết quả khác nhau

+0

Vui lòng kiểm tra chỉnh sửa –

+0

Nhận xét này khó hiểu. Có, selectedValue property và selectedItem.Text CÓ thể giống nhau, nhưng RẤT thường xuyên chúng KHÔNG như ví dụ ở trên mà SelectedValue là "de" và SelectedItem.Text là "German" hoặc SelectedValue là "CA" và SelectedItem.Text là "California ". Phổ biến nhất, SelectedValue là chuỗi đại diện của một giá trị chỉ số chính DB và SelectedItem.Text là giá trị từ một cột cụ thể cho cùng một hàng trong một bảng DB. –

3

Chúng đều khác nhau. SelectedValue thuộc tính cung cấp cho bạn giá trị thực của mục được chọn trong khi SelectedItem.Text cung cấp cho bạn văn bản hiển thị. Ví dụ: bạn thả xuống có thể có một itme như

<asp:ListItem Text="German" Value="de"></asp:ListItem> 

Vì vậy, trong trường hợp này SelectedValue sẽ deSelectedItem.Text sẽ cung cấp 'Đức'

EDIT:

Trong trường hợp đó, chúng đều giống nhau ... Nguyên nhân SelectedValue sẽ cung cấp cho bạn giá trị được lưu trữ cho mục đã chọn hiện tại trong menu thả xuống và SelectedItem.Value sẽ là Giá trị của mục hiện được chọn.

Vì vậy, cả hai đều cho bạn kết quả tương tự.

+0

Kiểm tra chỉnh sửa .. Tôi đã nhầm lẫn .Text –

7

Một khác biệt quan trọng giữa hai (mà có thể nhìn thấy trong mã Reflected) là SelectedValue sẽ trả về một chuỗi rỗng nếu không có gì được chọn, trong khi SelectedItem.Value sẽ ném một ngoại lệ NullReference.

0

Hãy cẩn thận khi sử dụng SelectedItem.Text ... Nếu không có mục nào được chọn, thì SelectedItem sẽ là rỗng và SelectedItem.Text sẽ tạo ra một ngoại lệ giá trị null.

.NET nên đã cung cấp thuộc tính SelectedText như thuộc tính SelectedValue trả về String.Empty khi không có mục nào được chọn.

Các vấn đề liên quan