我有城市的asp下拉菜单,然后是所选城市内的建筑物下拉列表,然后是所选建筑物中的房间列表视图:
<asp:UpdatePanel ID="CityListUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="CityListDropDown" class="form-control" Width="250" runat="server" DataSourceID="CityListDataSource" DataTextField="name" DataValueField="id" AutoPostBack="True" OnSelectedIndexChanged="CityListDropDown_SelectedIndexChanged">
</asp:DropDownList>
<asp:ObjectDataSource ID="CityListDataSource" runat="server" SelectMethod="GetListOfCities" TypeName="RoomTraq.CityDataServiceReference.CityDataServiceClient"></asp:ObjectDataSource>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="BuildingListUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="BuildingListDropDown" class="form-control" Width="250" runat="server" DataSourceID="BuildingListDataSource" DataTextField="name" DataValueField="id" AutoPostBack="True" OnSelectedIndexChanged="BuildingListDropDown_SelectedIndexChanged">
</asp:DropDownList>
<asp:ObjectDataSource ID="BuildingListDataSource" runat="server" SelectMethod="BuildingsByCity" TypeName="RoomTraq.BuildingDataServiceReference.BuildingDataServiceClient">
<SelectParameters>
<asp:ControlParameter ControlID="CityListDropDown" Name="CityId" PropertyName="SelectedValue" Type="Int64" />
</SelectParameters>
</asp:ObjectDataSource>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="RoomListUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:ListView ID="ListView1" runat="server" DataSourceID="RoomListDataSource" InsertItemPosition="LastItem">
....
<asp:ObjectDataSource ID="RoomListDataSource" runat="server" DataObjectTypeName="RoomTraq.RoomDataServiceReference.Room" DeleteMethod="DeleteRoom" InsertMethod="AddNewRoom" SelectMethod="RoomsByBuilding" TypeName="RoomTraq.RoomDataServiceReference.RoomDataServiceClient" UpdateMethod="UpdateRoom">
<SelectParameters>
<asp:ControlParameter ControlID="BuildingListDropDown" Name="BuildingId" PropertyName="SelectedValue" Type="Int64" />
</SelectParameters>
</asp:ObjectDataSource>
如您所见,每个元素都从数据源获取数据,该数据源使用前一个元素的选定值作为查询的参数。
在后面的代码中,我有
protected void CityListDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
BuildingListUpdatePanel.Update();
RoomListUpdatePanel.Update();
}
protected void BuildingListDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
RoomListUpdatePanel.Update();
}
当页面首次出现时,所有内容都会正确显示所选择的第一个城市,该城市的建筑物列表以及第一个建筑物的房间列表。
当我选择不同的建筑物时,房间列表会正确更新。
问题:当我选择不同的城市时,建筑物列表会正确更新,但房间列表不会更新。两者都应该更新 - 我将它们放在更新面板中,这样我就可以对这些面板进行部分页面更新,我告诉面板要更新,但面板不会自行更新。我提供房间数据的Web服务永远不会被调用,直到我选择不同的建筑物。但是当建筑物清单更新以反映新的城市选择时,这会使我的页面处于不良状态,但房间列表仍然显示前一个城市的建筑物的房间。 请帮助!!