DropDownList Autopostback清除字段,恢复为默认值

时间:2012-08-13 20:59:21

标签: c# asp.net drop-down-menu autopostback

我在详细信息视图中的两个不同字段中有两个下拉列表,第一个确定第二个的值。

当我从第一个ddl autopostback中选择一个值时,会删除详细信息视图中已有的所有数据,并将第一个下拉列表恢复为第一个选择。

当我从列表中选择(多次更改ddl选择)时,它会抛出:

数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.InvalidOperationException:数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。

来源错误:

[没有相关的源代码行]

------First DDL

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SQLLEAVECODE"
DataTextField="LEAVETYPE" DataValueField="LEAVECODE"
onselectedindexchanged="DropDownList1_SelectedIndexChanged"
AppendDataBoundItems="True" ViewStateMode="Enabled" AutoPostBack="True"
SelectedValue='<%# BIND("REQLEAVECODE") %>' Width="80px">
<asp:ListItem> </asp:ListItem>
</asp:DropDownList>

-------Second DDL

<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource1"
DataTextField="REASON" DataValueField="REASON" 
SelectedValue='<%# Bind("leavetype") %>'>
</asp:DropDownList>



---------page load
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DetailsView1.DataBind();
}
}


--------DDL 1 selectedIndexChange
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList lvtype = (DropDownList)(DetailsView1.FindControl("DropDownList1"));
DropDownList lvreason = (DropDownList)(DetailsView1.FindControl("DropDownList2"));
Label27.Text = lvtype.SelectedValue.ToString();

DetailsView1.Fields[4].Visible = true;
}

2 个答案:

答案 0 :(得分:1)

如果Drop-down位于DetailsView,请处理ItemCommand event DetailsView而不是DropDownList1_SelectedIndexChanged

希望这会对你有所帮助

答案 1 :(得分:0)

您的标记是指ID="DropDownList1"ID="DropDownList2"

但是,您的事件处理程序引用了DetailsView1.FindControl("DropDownList6")DetailsView1.FindControl("DropDownList6")。这可能与你的问题有关吗?