我在自定义用户控件中有以下代码,其中包含名为 ddlAggerationUnitId 的 DropDownList。 DropDownList 在 Page_Load() 事件上进行数据绑定。 “值”设置为 40 并且它确实存在。如果我删除 set 方法的逻辑,页面将加载并选择正确的项目,但如果该值是假的,页面将引发异常。我想通过在尝试设置值之前查看该值是否存在来避免该异常,这就是为什么逻辑是必要的。
现在看起来编译器正在将 if 语句评估为 false,尽管我知道事实上它应该是 true。
public long? Value
{
get { return Int64.Parse(ddlAggerationUnitId.SelectedItem.Value); }
set
{
if (ddlAggerationUnitId.Items.FindByValue(value.ToString()) != null)
{
ddlAggerationUnitId.SelectedValue = value.ToString();
}
}
}
任何帮助将不胜感激!谢谢!
编辑:这是我的 Page_Load() 事件:
protected void Page_Load(object sender, EventArgs e)
{
ddlAggerationUnitId.DataSource = ExternalAccount.GetAggregationUnits();
ddlAggerationUnitId.DataTextField = "Value";
ddlAggerationUnitId.DataValueField = "Key";
ddlAggerationUnitId.DataBind();
}
以下代码当前有效,但是我认为 DataBind 两次有点奇怪。这证实了我之前的怀疑:数据是在 FindByValue() 之后绑定的?
有人对如何清理这段代码有任何想法吗?
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindDdlAggerationUnitId();
}
}
private void BindDdlAggerationUnitId()
{
ddlAggerationUnitId.DataSource = SIGOpsGUI.App_Code.Business.ExternalAccount.GetAggregationUnits();
ddlAggerationUnitId.DataTextField = "Value";
ddlAggerationUnitId.DataValueField = "Key";
ddlAggerationUnitId.DataBind();
}
public long? Value
{
get { return Int64.Parse(ddlAggerationUnitId.SelectedItem.Value); }
set
{
BindDdlAggerationUnitId();
ddlAggerationUnitId.SelectedIndex = -1;
ListItem item = ddlAggerationUnitId.Items.FindByValue(value.ToString());
if (item != null)
{
ddlAggerationUnitId.SelectedValue = value.ToString();
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)