ASP.net 下拉动态样式,然后在中止提交时记住样式

标签 asp.net drop-down-menu postback styles dynamic-css

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

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

CheckBizRules();

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

如果任何业务规则检查失败,则该页面将无效。问题是,当页面重新呈现(viewsate 已启用,但没有数据被反弹)时,我美丽的条件样式现在可悲地消失了,生活在丢失 socks 的土地上。我需要保存它。

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

我想不出如何更好地表达这个问题,如果有人有任何建议或需要澄清,请不要犹豫,如果需要的话,可以强行提出。 ;)

最佳答案

我不确定我是否完全理解您对下拉项应用了哪种样式,但控件似乎不会在回发中保留这种样式。因此,通常此类信息需要保存在 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 而不是来自 DB 的数据在每次回发时重新设置下拉菜单的样式

关于ASP.net 下拉动态样式,然后在中止提交时记住样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/492177/

相关文章:

c# - 在 C# Web 应用程序中使用 WebSockets?

css - Bootstrap 下拉菜单不起作用

c# - 如何在异步回发期间重定向浏览器?

c# - session 变量不会在回发时持续存在(也许内存不足?)

回发时的 ASP.NET 数据绑定(bind)

asp.net - 在单个页面上使用多个 UpdatePanel 且不会互相干扰

asp.net - Azure Web App - 限制对 API 管理的访问

asp.net - 根据 DropDownList 的值动态启用或禁用RequiredFieldValidator

jquery - 使用 jQuery 更改一个下拉列表中另一个下拉列表的值

javascript - 如何在 jquery dynatree 中添加下拉列表作为子节点