У меня 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>
Проблема, с которой я столкнулся, заключается в том, что при запуске метода UpdateAccount в AccountBLL поле iPrimaryGroup всегда устанавливается в ноль. Если я проверю DropDownList для этого, он, кажется, работает правильно. По какой-то причине он просто не передает это одно значение обратно в функцию UpdateAccount. В DataSet не установлено значение ReadOnly, а в DropDownList выбрано правильное значение.
Несколько часов назад все работало нормально, и внезапно перестало работать без объяснимой причины. У меня есть еще один элемент управления DropDownList, который практически идентичен, который работает нормально.
Единственное, о чем я могу думать, это то, что я не рад тому, что я извлекаю данные из другого ObjectDataSource для DropDownList и пытаюсь связать значение, но то же самое происходит в другом DropDownList, и это появляется работать правильно.
Есть идеи, как мне это исправить? Я перезагружал Visual Studio несколько раз. Я очистил кэш, перестроил решение, изменил код и преобразовал DropDownList в метку, но без кубиков.
Есть ли где-то, что я могу заставить двухстороннее связывание произойти, или место, где я могу посмотреть, каковы соответствия между UpdateParameters и элементами управления FormView в EditItemTemplate? Мне не нужно переименовывать свое поле в базе данных, чтобы оно было в iGroupID?
Кажется, все работает нормально, за исключением того, что значение этого одного поля не передается функции. Буду признателен за любую помощь.
РЕДАКТИРОВАТЬ: могло бы показаться, что в строке таблицы, если я уберу runat = "server", он снова начнет работать. Итак, мой пересмотренный вопрос: почему? Есть ли способ обойти это?