当runat = server用于表行时,FormView中的双向数据绑定不起作用

时间:2009-11-10 05:57:58

标签: .net data-binding objectdatasource formview

我有一个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,它似乎正常运行。出于某种原因,它只是没有将这一个值传递回UpdateAccount函数。它未在DataSet中设置为ReadOnly,并且在DropDownList中选择了正确的值。

这几个小时前工作正常,它突然停止工作,没有任何可解释的原因。我有另一个DropDownList控件,几乎完全相同,工作正常。

我唯一能想到的是,我从DropDownList的不同ObjectDataSource中提取数据并尝试绑定该值并不高兴,但同样的事情发生在另一个DropDownList中并且出现了一个工作正常。

关于如何解决此问题的任何想法?我已经多次重启Visual Studio。我已经清除了缓存,我已经重建了解决方案,我已经对代码进行了差异化处理,并且我已经将DropDownList转换为Label,但没有骰子。

是否有某些地方我可以强制进行双向绑定,或者我可以查看一下这个地方,看看UpdateParameters和EditItemTemplate中的FormView控件之间的映射是什么?我不需要将数据库中的字段重命名为iGroupID吗?

除了没有将这一个字段的值传递给函数之外,所有内容似乎都能正常工作。任何帮助都将不胜感激。

编辑:看起来在表格行中,如果我取出runat =“server”,它会再次开始工作。所以,我修改过的问题是:为什么?有办法解决这个问题吗?

0 个答案:

没有答案