2017-12-01 14 views
0

私はモデルバインディングでasp net 4.5.2を使用しています。 DropDownListでモデルバインドを使用しようとすると、エラーが発生するのですが、エラーAn item with the same key has already been addedが発生しますが、SQLDataSourceに変更するとエラーになります。あなたがPage.IsPostBackをチェックせず、ページの読み込みにそれを移入しているので、事前に おかげaspnet web forms同じキーを持つアイテムがすでに追加されています


更新

サンプルコード

<asp:ListView runat="server" ID="lvChairItem" DataKeyNames="ChairItemId" InsertItemPosition="FirstItem" OnItemCanceling="lv_ItemCanceling" OnItemUpdated="lv_ItemUpdated" OnItemEditing="lv_ItemEditing" ClientIDMode="AutoID" OnCallingDataMethods="ChairItem_CallingDataMethods" SelectMethod="GetByChairId" InsertMethod="InsertItem" UpdateMethod="UpdateItem" DeleteMethod="DeleteItem" ItemType="App.Model.ChairItem"> 
............. 
<InsertItemTemplate> 
    <tr> 
     ........ 
     <td> 
      <asp:DropDownList ID="ddlRoomId" CssClass="" DataValueField="Value" DataTextField="Text" AppendDataBoundItems="true" Text='<%# BindItem.RoomId %>' Width="100%" OnCallingDataMethods="Room_CallingDataMethods" SelectMethod="GetAllForDDL" runat="server" EnableViewState="true"> 
       <asp:ListItem Value="">--Select--</asp:ListItem> 
      </asp:DropDownList> 
     </td> 
     ........ 
    </tr> 
</InsertItemTemplate> 
..................... 
</asp:ListView> 
+0

一部のコードを投稿するには、より多くの情報が必要です。あなたのモデルは、各ListItemのキー/値に対して同じ値を生成しています。 –

+0

ありがとうございます。しかし、EnableViewState = Falseをすべてのドロップダウンリストに追加することで修正しました。 – lostmylogin

答えて

0

はその後問題がありそうです。各ポストバックのコントロールを再設定する必要はありません。あなたは(しばしば)ViewStateを許可したいと思う。だから、私は再び有効にし、populateメソッドを(page.ispostbackではなく)ラップします。

+0

コントロールでModel Bindingを使用していますが、PageLoadとは関係ありません。 – lostmylogin

+0

次に、バインドイベントが2回発生しています。そのため、ビューステートを非アクティブ化した場合を除いて、重複したキーを取得する理由はありますが、ポストバックでのみ発生すると思います。私が何かを誤解していない限り、viewstateをオフにすると助けにならないでしょう... –

+0

ドロップダウンリストを使ってasp net webformsモデルバインディングを試したことがありますか? – lostmylogin

関連する問題