使用javascript刷新asp.net页面的最佳工作流

本文关键字:最佳 工作流 net javascript 刷新 asp 使用 | 更新日期: 2023-09-27 18:16:49

我正在ASP.net中构建一个页面,其中包含数百个问题,我正在从xml中解析。通过将动态创建的单选按钮渲染到一个名为sectionHolder的占位符,我可以渲染我的第一页问题。

javascript验证后,我想转移到下一个问题范围。这就是我想实现最佳解决方案的地方。

如果我做回调到我的服务器,并从我的sectionHolder中删除所有控件,然后添加新的问题,在我的页面没有变化。这可能是因为我需要刷新我的页面。

问题是当我刷新我的页面使用javascript:

setTimeout("location.reload(true);", 250);

我失去所有没有保存在我的会话对象。(在我的类中声明的所有变量都会被重置)我想知道如果我真的需要保存所有这些变量,我想保持在会话对象,因为我认为它使我的代码相当混乱。(从会话到值的常量强制转换,…)

我知道我可以使用一个函数来调用我的javascript从asp.net与生成的html代码,然后改变div的innerhtml,但我想继续使用我的代码,生成所有的问题,使用asp的单选按钮列表和列表项占位符,因为我所有的其他代码是基于此。

我真的要把一切在我的会话或生成javascript代码自己或有任何其他方法在这里吗?

谢谢!

——编辑——

//这里是一些代码,我渲染我的问题(函数在开始和每次页面重载时调用)

protected void AddQuestions()
{
    //lstsections is parsed from xml, it contains all the topics
    var cal = _lstSections.ElementAt(iCurrentSection);
    //limit questions to maxnumber
    var iNumQuestions = (cal._lstQuestions.Count < iNumQuestionsPerPage)
                            ? cal._lstQuestions.Count
                            : iNumQuestionsPerPage;
    for (int a = 0; a < iNumQuestions; a++)
    {
        //we offset our counter to determine page
        var iCurrentID = a + iCurrentQuestionStartIndex;
        //q is our current question
        var q = cal._lstQuestions.ElementAt(iCurrentID);
        //check if we dont have too many questions on this page
        var lbl = new Label() { Text = q.GetText(), ToolTip = q.GetToolTip() };
        var list = new RadioButtonList()
        {
            ID =  "RadioButtonList" + iCurrentID,
            RepeatDirection = RepeatDirection.Horizontal
        };
        list.Attributes.Add("runat", "Server");
        list.Attributes.Add("OnClick", "processText(" + (iCurrentID) + ")");
        list.EnableViewState = false;
        list.CssClass = "clsRadioButtonList";
        sectionHolder.Controls.Add(lbl);
        sectionHolder.Controls.Add(list);
        foreach (var opt in q._lstOptions)
        {
            var item = new ListItem() { Text = opt.Text, Value = opt.Value };
            list.Items.Add(item);
        }
        sectionHolder.Controls.Add(new LiteralControl("<br>"));
    }
}

使用javascript刷新asp.net页面的最佳工作流

你看过jQuery Ajax吗?您可以在第一次加载时呈现第一组问题,然后使用jQuery Ajax向服务器发出后续请求并获得其余问题。一旦你的用户回答了所有的问题,他们就可以提交包含所有加载和回答的问题的整个表单。

此方法可能是在不丢失页面上的所有内容的情况下向服务器进行干净的部分回发的最佳方法。你可以通过使用HttpContext来访问会话对象。当前(因为使用jQuery AJAX调用的方法需要是静态的,并使用[WebMethod]属性进行装饰)

这是一篇很棒的文章,解释了如何在ASP中实现jQuery AJAX。. NET Web Forms