0

所以,我有一个 ASP 下拉列表(这是 .net 2.0)。我将它与数据绑定。基本上,当页面加载并且它不是回发时,我们将获取记录数据,绑定所有下拉菜单,并将它们设置为适当的值(严格来说,我们:使用数据库中的基本数据集初始化页面,绑定下拉菜单从数据库中,从数据库中获取实际记录数据,此时将溺水设置为适当的设置)。我想要做的是有选择地设置列表选项的样式。所以数据库返回 3 个项目:ID、文本和一个标志,指示我的记录是否是“活动的”(我会适当地设置样式)。这很容易做到,我已经做到了。

我的问题是当表单提交停止时会发生什么。我们稍微扩展了 Page 类并创建了一个 AddError() 方法,该方法将从失败的业务规则检查中创建一个错误列表,然后将它们显示在 ValidationSummary 中。在提交按钮的点击事件中,它的工作原理如下:

CheckBizRules();

if(Page.IsValid)
{
    SaveData();
}

如果任何业务规则检查失败,则页面将无效。问题是,当页面重新渲染(启用视图,但没有数据反弹)时,我美丽的条件样式现在很遗憾地消失了,去生活在丢失袜子的土地上。我需要保存它。

我希望在这里避免另一个数据库调用(例如,如果页面无效,则再次从数据库中获取列表数据,只是为了重新设置列表样式)。但是,如果这是我的行动方针,那还不是世界末日。我希望有人可能有其他建议。

我想不出如何更好地表达这个问题,如果有人有任何建议或需要澄清,请毫不犹豫地得到它,如果需要的话。;)

4

2 回答 2

0

好吧,除了在页面无效时去数据库重新检索我的列表数据并重新设置控件样式外,我什么也想不出来。

于 2009-01-30T12:32:18.957 回答
0

我不确定我是否完全理解您将哪种样式应用于下拉项,但似乎这种样式是控件不保留跨回发的东西。因此,通常这种信息需要保存在 ViewState 中。我看到两个选项(除了从数据库重新加载):

第一种方法:创建自己的下拉控件,继承自 DropDownList。然后在设置项目样式时将样式数据保存在控件的 ViewState 包中:

public void SetItemActive(ListItem item)
       {
         ViewState[item.Value] = "active";           
        }

然后覆盖 OnRender

protected override void Render(HtmlTextWriter writer)
{

   ....

   foreach(ListItem item in Items)
   {
    if ( ViewState[item.Value] == "active")
    { 
            ** RenderActiveItem **
    }
    else 
    {
            ** RenderNormalItem **

    }

}

第二种方法:将活动 ID 保存在页面的 ViewState 中,然后使用来自 ViewState 而不是来自数据库的数据重新设置每个回发的下拉菜单的样式

于 2009-02-20T17:40:43.923 回答