关于asp.net:Formview下拉列表2取决于下拉列表1

关于asp.net:Formview下拉列表2取决于下拉列表1

Formview Dropdown 2 depends on Dropdown 1

我有一个表单视图,在编辑模板中有两个下拉菜单。
下拉列表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设置为不存在的项目可能存在问题。


推荐阅读