Это грубый пример, но в основном вы можете вместо создания контрольного параметра создать параметр сеанса или что-то подобное:
Таким образом, когда вы нажимаете ввод, он будет использовать значение текстового поля или при изменении раскрывающегося списка он будет использовать значение раскрывающегося списка.
Вы также можете включить переключатель, дающий пользователю возможность указать, откуда он хочет получить значение.
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="true"
onselectedindexchanged="ddl_SelectedIndexChanged"></asp:DropDownList>
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
<asp:Button runat="server" Text="ClickMe" ID="btnOne" OnClick="btnOne_Click"/>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server">
<SelectParameters>
<asp:SessionParameter SessionField="ObjectParameterName" />
</SelectParameters>
</asp:ObjectDataSource>
Код сзади:
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
Session["ObjectParameterName"] = ddl.SelectedValue;
ObjectDataSource1.Select();
}
protected void btnOne_Click(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
Session["ObjectParameterName"] = txt.Text;
ObjectDataSource1.Select();
}
РЕДАКТИРОВАТЬ ПОСЛЕ ТОГО, КАК
Вы также можете вместо того, чтобы назначать параметр полю сеанса, просто установить параметр objectdatasource напрямую (исключение обработки исключений).
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
ObjectDataSource1.SelectParameters.Add(new Parameter() {Name="Name",DefaultValue=ddl.SelectedValue });
}