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

时间:2011-12-06 07:10:13

标签: c# javascript asp.net refresh

我正在ASP.net中构建一个页面,其中包含数百个我正在从xml解析的问题。 我可以通过将动态创建的radiobuttonlists呈现给名为 sectionHolder 的占位符来呈现我的第一页问题。

在javascript验证后,我想继续讨论下一系列问题。 这是我想要实现最佳解决方案的地方。

如果我对我的服务器进行回调并从 sectionHolder 中移除所有控件,然后添加新问题,则我的页面中没有任何更改。这可能是因为我需要刷新我的页面。

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

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

我丢失了未保存在会话对象中的所有内容。 (在我的类中声明的所有变量都被重置) 我想知道我是否真的需要保存我想要保留在该会话对象中的所有变量,因为我认为它使我的代码非常混乱。 (从会话到值的持续转换,...​​...)

我知道我可以使用一个函数从asp.net调用我的javascript生成的html代码,然后更改div的innerhtml但我想继续使用我的代码生成所有问题给占位符使用asp的radiobuttonlist和listitem,因为我的所有其他代码都基于此。

我是否真的必须将所有内容都放在我的会话中或自己生成javascript代码,或者还有其他方法吗?

非常感谢!

--- --- EDIT

//这是我提出问题的代码 (在开始时和每页重新加载时调用的函数)

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>"));
    }
}

1 个答案:

答案 0 :(得分:0)

您是否研究过jQuery Ajax?您可以在第一次加载时呈现第一组问题,然后使用jQuery Ajax向服务器发出后续请求并获得其余的问题。一旦您的用户回答了所有问题,他们就可以提交整个表格,并填写并回答所有问题。

这种方法可能是对服务器进行干净的部分回发而不会丢失页面上所有内容的最佳方法。并且您可以使用HttpContext.Current访问会话对象(因为使用jQuery AJAX调用的方法需要是静态的并且使用[WebMethod]属性修饰)

Here's a great article解释了如何在ASP.NET Web窗体中实现jQuery AJAX