3

次のように ObjectDataSource を設定しています。

<asp:ObjectDataSource ID="AccountDataSource" runat="server" OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetAccountByAccountID" TypeName="AccountBLL" InsertMethod="RegisterAccount" UpdateMethod="UpdateAccount">
    <SelectParameters>
        <asp:QueryStringParameter Name="iAccountID" QueryStringField="iAccountID" Type="Int32" />
    </SelectParameters>
    <InsertParameters>
        <asp:Parameter Name="sAccountname" Type="String" />
        <asp:Parameter Name="sPassword" Type="String" />
        <asp:Parameter Name="sConfirmPassword" Type="String" />
        <asp:Parameter Name="sEmailAddress" Type="String" />
        <asp:Parameter Name="sConfirmEmailAddress" Type="String" />
        <asp:Parameter Name="sDisplayName" Type="String" />
        <asp:Parameter Name="sRealName" Type="String" />
        <asp:Parameter Name="sSignature" Type="String" />
        <asp:Parameter Name="iTimezone" Type="Int32" />
        <asp:Parameter Name="iGuestAccountID" Type="Int32" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="sAccountname" Type="String" />
        <asp:Parameter Name="sPassword" Type="String" />
        <asp:Parameter Name="sRealName" Type="String" />
        <asp:Parameter Name="sDisplayName" Type="String" />
        <asp:Parameter Name="sEmailAddress" Type="String" />
        <asp:Parameter Name="sSignature" Type="String" />
        <asp:Parameter Name="bIsActive" Type="Boolean" />
        <asp:Parameter Name="iTimeZoneID" Type="Int32" />
        <asp:Parameter Name="iPrimaryGroup" Type="Int32" />
        <asp:Parameter Name="original_iAccountID" Type="Int32" />
    </UpdateParameters> </asp:ObjectDataSource>
<asp:ObjectDataSource ID="GroupDataSource" runat="server" OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetGroups" TypeName="GroupBLL">
</asp:ObjectDataSource>

ページの FormView 内の EditItemTemplate で、次のように宣言しました。

<tr id="primaryGroupRow" runat="server">
  <td class="Fieldname">Primary Group:</td>
  <td><asp:DropDownList ID="iPrimaryGroupDropDownList" runat="server" DataSourceID="GroupDataSource" CssClass="PageText" 
DataTextField="sGroupName" DataValueField="iGroupID" SelectedValue='<%# Bind("iPrimaryGroup") %>'></asp:DropDownList></td>
</tr>

私が抱えている問題は、AccountBLL の UpdateAccount メソッドが起動すると、iPrimaryGroup フィールドが常にゼロに設定されることです。これについて DropDownList を調べると、適切に機能しているように見えます。何らかの理由で、この 1 つの値を UpdateAccount 関数に戻していないだけです。DataSet で ReadOnly に設定されておらず、DropDownList で正しい値が選択されています。

これは数時間前には正常に機能していましたが、説明のつかない理由で突然機能しなくなりました。正常に動作している実質的に同一の別の DropDownList コントロールがあります。

私が考えることができる唯一のことは、DropDownList の別の ObjectDataSource からデータを取得して値をバインドしようとしているのが不満であるということですが、同じことが他の DropDownList で発生しており、その 1 つが機能しているように見えますちゃんと。

これを修正する方法についてのアイデアはありますか? Visual Studio を数回再起動しました。キャッシュをクリアし、ソリューションを再構築し、コードを比較し、DropDownList を Label に変換しましたが、ダイスはありません。

EditItemTemplate の UpdateParameters と FormView コントロールの間のマッピングを確認するために、双方向バインディングを強制的に発生させることができる場所、または場所を確認できる場所はありますか? データベース内のフィールドの名前を iGroupID に変更する必要はありませんか?

この 1 つのフィールドの値が関数に渡されていないことを除いて、すべてが正常に機能しているように見えます。どんな助けでも大歓迎です。

編集:表の行で、runat="server" を取り出すと、再び機能するように見えます。それで、私の修正された質問は次のとおりです。なぜですか?これを回避する方法はありますか?

4

0 に答える 0