11

このコード片

<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>

このエラーが発生します:

'SelectedValue' プロパティを宣言的に設定することはできません。

ただし、これはデータバインドされた GridView の合法的で一般的に使用される編集テンプレートです。属性は確かにここSelectedValueで宣言的に設定されているようです。

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

問題は、宣言的に設定できる場合とそうでない場合の違いは何ですか? エラー メッセージは、許可されていないことを意味します。

4

2 に答える 2

9

マークアップでは SelectedValue='<%# "32" %>' 構文を使用します (次の例では、一重引用符と二重引用符の順序に注意してください):

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

または DataBinding の直後のコード ビハインド (例):

  ddlField.DataSource = Fields.SelectAll();
  ddlField.DataBind();           
  ddlField.SelectedValue = "32";
于 2010-03-13T07:49:09.310 に答える
7

これは、デザイナーを介して設定できないことを意味します。

正しい方法は次のとおりです。

<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>

バインドされたメソッドが機能する理由は、値がデザイン モードでは選択されず、コントロールがデータソースにバインドされた後の実行時に選択されるためです。

DropDownList.SelectedValue メソッドは実行時に適用されることを意図しているため、「装飾的に」設定できないというエラーが発生します

于 2009-02-24T04:39:44.967 に答える