我有一个表单视图,在编辑模板中有两个下拉菜单。
下拉列表1由允许值列表明确设置。 它还设置为自动回发。
下拉列表2是数据绑定到对象数据源的对象,此对象数据源使用第一个下拉列表作为其参数之一。 (想法是下拉菜单1限制下拉菜单2中显示的内容)
在项目的编辑模板的第一个视图上,它可以正常工作。 但是,如果下拉菜单1选择了其他项目,则会回发并产生错误
Databinding methods such as Eval(),
XPath(), and Bind() can only be used
in the context of a databound control.
这是下拉列表2:
1 2 3
| ' DataSourceID="MasterProjectsDataSource2" DataTextField="Name" DataValueField="ID" AppendDataBoundItems="true">
</asp:DropDownList> |
这是MasterProjectDataSource2:
1 2 3 4 5 6 7
| <asp:ObjectDataSource ID="MasterProjectsDataSource2" runat="server"
SelectMethod="GetMasterProjectList" TypeName="WebWorxData.Project">
<SelectParameters>
<asp:ControlParameter ControlID="RPMTypeList" Name="RPMType_ID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource> |
对于如何使它起作用的任何帮助将得到极大的帮助。
我在FormView中绑定下拉列表时遇到了类似的问题。我通过在formview的" OnDataBound"中手动设置选定的值来解决此问题。
(不知道从何处获取ConnectToProject_ID)
1 2 3
| FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
ddl.SelectedValue = String.Format("{0:D}", ConnectToProject_ID); |
准备保存时,请使用" OnItemInserting"事件:
1 2 3
| FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.Values["ConnectToProject_ID"] = ddl.SelectedValue; |
或" OnItemUpdating"
准备保存时,请使用" OnItemInserting"事件:
1 2 3
| FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.NewValues["ConnectToProject_ID"] = ddl.SelectedValue; |
除非您的第二个下拉列表位于数据绑定控件中(例如,Repeater),否则我不确定您要绑定SelectedValue的内容。显然,.NET都不是-因为这可能是发生错误的地方。
Connect_ToProjectId应该来自哪里?
回传后听起来控件未正确绑定数据。
您是否要绑定页面或后面代码中的第一个下拉列表?
如果是代码隐藏的,则每次都在on_init或on_load中进行吗?
在回发之后,第二个下拉列表的SelectedValue设置为不存在的项目可能存在问题。