我在 ASP.Net 网页上有一个 DropDown
列表。我正在尝试在页面加载时设置它的 SelectedValue。我正在使用 this page作为引用。这是我的代码:
<asp:DropDownList runat="server" ID="ddlType" DataSourceID="sdsType" DataTextField="Name" DataValueField="AssetTypeID" />
<asp:SqlDataSource runat="server" ID="sdsType" ConnectionString='<%$ ConnectionStrings:SystemManagement %>' SelectCommand="SELECT AssetTypeID, [Name] FROM AssetType UNION SELECT 0, '' ORDER BY [Name]" SelectCommandType="Text" />
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
if (Request.QueryString["searchtype"] != null)
{
ddlType.SelectedValue = ddlType.Items.FindByText(Request.QueryString["searchtype"]).Value;
ddlType.SelectedValue = "1";
}
}
else
{
}
}
设置 SelectedValue
的第一行将给我一个 Null Reference Exception,如果我检查 ddlType
它没有项目。但是,如果我注释掉设置 SelectedValue
的第一行并使用第二行设置它(只是对值进行硬编码),它就会起作用。怎么回事?
最佳答案
您可以使用 OnDataBound
事件来执行您当前的逻辑
/*Note the addition of "OnDataBound" */
<asp:DropDownList runat="server"
ID="ddlType"
DataSourceID="sdsType"
DataTextField="Name"
DataValueField="AssetTypeID"
OnDataBound="ddlType_DataBound"
/>
<asp:SqlDataSource runat="server" ID="sdsType" ConnectionString='<%$ ConnectionStrings:SystemManagement %>' SelectCommand="SELECT AssetTypeID, [Name] FROM AssetType UNION SELECT 0, '' ORDER BY [Name]" SelectCommandType="Text" />
protected void ddlType_DataBound(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
if (Request.QueryString["searchtype"] != null)
{
ddlType.SelectedValue = ddlType.Items.FindByText(Request.QueryString["searchtype"]).Value;
ddlType.SelectedValue = "1";
}
}
else
{
}
}
关于c# - 无法设置下拉列表选择项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841669/