以下不会产生错误,因此我无法测试成功与否。 Visual Studio的设置可能吗?
try
{
dt = new DataTable();
dt.Columns.Add("Cnt");
for (int i = 1; i <= 10; i++)
{
dt.Rows.Add(i);
}
DrpLevel.DataTextField = "Cnt";
DrpLevel.DataValueField = "Cnt";
DrpLevel.DataSource = dt;
DrpLevel.DataBind();
DrpLevel.Text = "777"; //Should cause error!!
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
答案 0 :(得分:0)
如果在Page.IsPostBack属性为false时运行该代码,则不会出现异常。这也在SelectedValue的MSDN documentation中解释(Text属性只调用SelectedValue来获取/设置)
当所选值不在可用值列表中时,a 执行回发,ArgumentOutOfRangeException异常 抛出。
如果我们查看source code of SelectedValue,我们可以看到此检查
bool loaded = Page != null && Page.IsPostBack && _stateLoaded;
if (loaded && selectItem == null) {
throw new ArgumentOutOfRangeException("value", SR.GetString(SR.ListControl_SelectionOutOfRange, ID, "SelectedValue"));
}
因此,当IsPostBack为false或控件尚未加载ViewState时,我们不会得到任何异常。