11

Đoạn mã nàyASP: DropDownList trong ItemTemplate: Tại sao thuộc tính SelectedValue được phép?

<asp:DropDownList runat="server" ID="testdropdown" SelectedValue="2"> 
    <asp:ListItem Text="1" Value="1"></asp:ListItem> 
    <asp:ListItem Text="2" Value="2"></asp:ListItem> 
    <asp:ListItem Text="3" Value="3"></asp:ListItem> 
</asp:DropDownList> 

mang lại lỗi này:

The 'SelectedValue' property cannot be set declaratively.

Tuy nhiên, đây là một chỉnh sửa mẫu quy phạm pháp luật và thường được sử dụng cho GridViews databound. Thuộc tính SelectedValue chắc chắn dường như được khai báo ở đây.

<EditItemTemplate> 
    <asp:DropDownList runat="server" 
     ID="GenreDropDownList" 
     DataSourceID="GenreDataSource" 
     DataValueField="GenreId" 
     DataTextField="Name" 
     SelectedValue='<%# Bind("Genre.GenreId") %>'> 
    </asp:DropDownList> 
</EditItemTemplate> 

Câu hỏi đặt ra là: sự khác biệt giữa các trường hợp khi bạn được phép đặt báo cáo và những trường hợp bạn không được phép khai báo là gì? Thông báo lỗi ngụ ý rằng nó không bao giờ được cho phép.

Trả lời

6

Điều đó có nghĩa là bạn không thể đặt thông qua nhà thiết kế.

Cách đúng là:

<asp:DropDownList runat="server" ID="testdropdown"> 
    <asp:ListItem Text="1" Value="1"></asp:ListItem> 
    <asp:ListItem Text="2" Value="2" Selected></asp:ListItem> 
    <asp:ListItem Text="3" Value="3"></asp:ListItem> 
</asp:DropDownList> 

Lý do phương pháp ràng buộc làm việc là vì giá trị không được chọn trong chế độ thiết kế nhưng khi chạy sau khi kiểm soát được ràng buộc với một nguồn dữ liệu

Các DropDownList Phương thức .SelectedValue có nghĩa là được áp dụng trong thời gian chạy do đó lỗi về việc không thể đặt nó 'decoratively'

+0

Đó sẽ trả lời câu hỏi của tôi, nếu nó không được cho phần thứ hai của câu hỏi của tôi. Rõ ràng, trong một số trường hợp, bạn được phép khai báo SelectedValue, như tôi đã minh họa. Tôi đang cố gắng để hiểu sự khác biệt giữa các trường hợp khi bạn được phép và không. – recursive

+1

Vì trong mẫu GridView bạn chưa thực sự đặt giá trị bằng cách sử dụng phương thức liên kết. Liên kết thực sự xảy ra khi chạy. Nó giống như nói "Khi chạy, khi tôi liên kết dữ liệu với nó, hãy chọn giá trị dựa trên trường này" – Gautam

7

trong sử dụng đánh dấu SelectedValue = '<% # "32"%> cú pháp. (Lưu ý ví dụ sau):

<asp:DropDownList ID="ddlField" SelectedValue='<%# "32" %>' 
    runat="server"  DataTextField="Name" DataValueField="ID" > 
    </asp:DropDownList> 

hoặc trong code-behind ngay sau DataBinding (ví dụ):.

ddlField.DataSource = Fields.SelectAll(); 
     ddlField.DataBind();   
     ddlField.SelectedValue = "32"; 
+0

Mã "đánh dấu" không hoạt động nếu các mục được đặt ở thời gian thiết kế so với thực hiện lệnh gọi databind để điền – NotMe

+0

Cảm ơn, tôi đã quên dấu #. – Ben