首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“保存”按钮适用于“默认”结果集,但不适用于筛选的结果集

“保存”按钮适用于“默认”结果集,但不适用于筛选的结果集
EN

Stack Overflow用户
提问于 2019-05-10 00:01:58
回答 1查看 35关注 0票数 0

背景:

我有一个网页,每个数据行上都有一个保存按钮。

每次调用函数AccessRecords时,它做的第一件事就是dashboard.Controls.Clear();,其中dashboard是我的PlaceHolder。

我有一个索引/计数器,用于唯一地标识每一行。

当为第6行创建保存按钮时,它将接收名称saveButton6,并将recordId存储在CommandName属性中,将计数存储在CommandArgument属性中。

然后,save触发save命令/函数,两个存储的属性用于构建SQL过程的查询。

当屏幕的初始加载获取所有记录时,存在这样的错觉,即这是正常工作的。我现在已经将初始加载切换为仅活动记录,如果您希望查看非活动记录,则必须选择它并单击"search“按钮-这将再次调用AccessRecords函数,但会传入不同的参数。

保存问题:当我搜索非活动记录并选择要更改的字段,然后单击保存按钮时,例如在第6行,它不会对所选的当前记录(ID 15)运行保存功能,而是对初始加载的位置为6行(ID 11)的记录运行功能。

这让我相信,当AccessRecords清除PlaceHolder,然后重新建立控件时-即使它正确地更新了数据字段,它也没有重新构建saveButton6,而是重用了以前的saveButton6 ( ID为11而不是15)。

因此,如果我有6个活动记录,我可以点击相关的保存按钮来更改它们的状态,它们的状态将被保存。但是,当我过滤以获取非活动记录或所有记录时,只要我点击保存,页面就会重新加载-并使用默认的过滤器设置重新加载。这些记录恢复为与原始6个活动记录相同的记录(除了下拉列表将属于搜索结果前6行的记录显示为选定值之外)。然后,如果我在这里点击保存,它会处理保存按钮,就像它在搜索之前在初始页面上做的那样。这意味着,除非我修复了这个bug或将初始视图设置为所有记录非活动记录,否则永远不能重新激活。

编辑-感知到的问题来源:似乎这可能与我看到其他人解决的事件处理程序问题有关。其中,每当触发任何其他事件处理程序时,都会执行pageLoad函数。代码中的放置顺序似乎无关紧要。

一个可能的解决方案:我想到的一个解决方案是将初始加载设置为空,这样就不会创建按钮。然后,当搜索按钮被选中时,页面会重新加载--但要做到这一点,我必须将所有选定的过滤选项存储在url中,或者存储在会话变量中,或者存储在其他一些半持久性存储中,以便在下次加载时使用。这个“修复”将会非常乏味。

保存问题-编辑:我如何解决加载问题,以便在pageLoad事件之前触发事件?

代码语言:javascript
复制
protected void accessRecord()
{
    <logic that determines initial whereClause>
    accessRecord(whereClause)
}
protected void accessRecord(string FilterParam)
{
    <logic that populates dashboard PlaceHolder with query results>
    //also creates buttons per record for record changes
}
protected void filter(object sender, EventArgs e)
{
    filter(); //Allows button push in filter div to load dashboard
}
protected void filter()//allows filter to be called in other places to get the current filter settings and load the dashboard
{
    <logic that determines whereClause with user selected filters from a filter div>
    accessRecord(whereClause)
}
protected void Page_Load(object sender, EventArgs e)
{
        loadFilterButtonBar();       
        accessRecord();
}
protected void saveChange(object sender,EventArgs e)
{
    //executes SQL queries to save the change made to the record
    <logic for queries>
    filter();

    //Uses LinkButton lb = (LinkButton)sender;
    //     string recordID = (string)lb.CommandName;
    //     string statusDD_ID = (string)lb.CommandArgument;
    //To determine which record to update
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-10 03:22:09

https://www.devu.com/tutorials/cs-asp/articles/lesson-17-page_load-and-page-ispostback

我花了一段时间才弄明白如何正确地做这件事。每次我尝试将ispostback作为加载的条件时,如果我点击一个按钮,就会出现一个空白屏幕--我之前没有else子句。

代码语言:javascript
复制
...Page_Load...
    if (!IsPostBack)
    {
        setInitialFilter();
    }
    else
    {
        HttpContext context = HttpContext.Current;
        string whereClause = (string)(context.Session["whereClause"]);
        accessRecord(whereClause); 
    }

...setInitialFilter()
{
    <logic to set initial conditions>
}

protected void filter()//allows filter to be called in other places to get the current filter settings and load the dashboard
{
    <logic that determines whereClause with user selected filters from a filter div>

    //Added the following two lines
    HttpContext context = HttpContext.Current;
    context.Session["whereClause"] = whereClause;

    accessRecord(whereClause)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56063446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档