2014-02-19 221 views
0

我有MPE,更新面板内的mpeNew,里面有一个按钮btnClose。 它应该在页面上显示少量下拉列表的selectedIndexChange事件。ModalPopUpExtender不能与DropDownList一起工作

C#:

protected void ddlCustomer_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if(ddlCustomer.SelectedIndex==1) 
    { 
    ViewState["sender"] = sender; //MPE shows up only when this line's commented 
    mpeNew.show(); 
    } 
} 

protected void btnClose_Click(object sender, EventArgs e) 
{ 
    mpeNew.Hide(); 
    DropDownList ddl = (DropDownList)ViewState["sender"]; 
    ddl.SelectedIndex = 0; 
} 

模态显示出来,只有当视图状态声明评论说。但实际需要知道哪个下拉菜单打开了Modal。 也尝试在updatepanel中使用此下拉列表作为触发器。 没有错误。该模式只是不会弹出。 我哪里错了。或者有什么其他的方式来得到我想要的。

+0

尝试启用JavaScript错误并在浏览器上进行调试,以查看是否有客户端错误发生。 –

+0

'未捕获PagerequestManagerServerErrorException。错误序列化system.web.ui.webcontrols.dropdownlist类型的值system.web.ui.webcontrols.dropdownlist'这是原因。这是关于什么的。怎么修? – Ruby

+1

我已根据您的评论回答了您的问题,错误发生的原因是DDL未标记为可以serilizable,因此无法存储在ViewState中。 –

回答

1

下拉控件是不可序列化的,所以当tring将它存储在视图状态时,代码会中断。而不是保存发件人,将下拉列表的ID保存在ViewState中会更合适。通过ID你总能找到控制使用FindControl("Id")功能。基于您的代码Exaple:

ViewState["sender"] = ddlControl.ID; 

DropDownList ddl = (DropDownList)FindControl(ViewState["sender"]); 

希望这会有所帮助。

+0

非常感谢你 – Ruby

+0

这没有奏效。我试过 - 'DropDownList ddl =(DropDownList)FindControl(ViewState [“sender”]。ToString());'ddl为null。 – Ruby

+1

如果下拉列表位于任何面板内,请尝试Panel1.FincControl(ViewState的[ “发件人”]。的ToString())。我认为这将工作。 –