我有一个名为 EditEmployee.aspx 的 ASP.NET 页面。加载时(在查询字符串中传递 EmployeeId),它会填充文本框和其他控件。
一名员工与美国的一个且只有一个公司办公室相关联 下拉列表层次结构
州市政厅
被展示。
如果用户单击更改城市,我需要进行回发以填充该城市的新办公室列表。
虽然我可以在 Page_Load 期间将 Employee 对象保存到会话变量中,但在需要保存时,似乎在将该对象从会话中恢复时丢失了数据上下文。
请问我该如何补救?
谢谢。
我有一个名为 EditEmployee.aspx 的 ASP.NET 页面。加载时(在查询字符串中传递 EmployeeId),它会填充文本框和其他控件。
一名员工与美国的一个且只有一个公司办公室相关联 下拉列表层次结构
州市政厅
被展示。
如果用户单击更改城市,我需要进行回发以填充该城市的新办公室列表。
虽然我可以在 Page_Load 期间将 Employee 对象保存到会话变量中,但在需要保存时,似乎在将该对象从会话中恢复时丢失了数据上下文。
请问我该如何补救?
谢谢。
您不应将员工对象或内容对象保存在会话变量中,而应使用查询字符串中的 id 来查询数据。数据上下文对象是数据提供者,可以像使用 using 的工作单元方法一样创建和处置,
当在 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 中的页面部分。页面的其余部分不应受到影响。