0

我有一个名为 EditEmployee.aspx 的 ASP.NET 页面。加载时(在查询字符串中传递 EmployeeId),它会填充文本框和其他控件。

一名员工与美国的一个且只有一个公司办公室相关联 下拉列表层次结构

州市政厅

被展示。

如果用户单击更改城市,我需要进行回发以填充该城市的新办公室列表。

虽然我可以在 Page_Load 期间将 Employee 对象保存到会话变量中,但在需要保存时,似乎在将该对象从会话中恢复时丢失了数据上下文。

请问我该如何补救?

谢谢。

4

2 回答 2

1

您不应将员工对象或内容对象保存在会话变量中,而应使用查询字符串中的 id 来查询数据。数据上下文对象是数据提供者,可以像使用 using 的工作单元方法一样创建和处置,

于 2013-02-07T03:55:26.263 回答
0

当在 City 下拉列表中进行新选择时,我会将下拉列表放在更新面板中并重新绑定 Office 下拉列表。

简要地...

前端:将 a 添加ScriptManager到您的页面并将下拉列表包装在UpdatePanel.

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="ddlCity" 
                          runat="server" 
                          OnSelectedIndexChanged="ddlCityChanged">
        </asp:DropDownList>
        <asp:DropDownList ID="ddlOffices"
                          runat="server">
        </asp:DropDownList>
    </ContentTemplate>
</asp:UpdatePanel>

后面的代码,只需像往常一样连接事件处理程序。

protected void ddlCityChanged(object sender, EventArgs e) 
{
    var city = ddlCity.SelectedValue;
    // get the offices for that city
    ddlOffices.DataSource = [offices];
    ddlOffices.DataBind();
}

UpdatePanel 将触发部分回发而不是完整回发,并使用 Ajax 仅刷新 UpdatePanel 中的页面部分。页面的其余部分不应受到影响。

于 2013-02-07T03:58:37.867 回答