需要有关AJAX工作流程的帮助

时间:2009-01-07 18:01:34

标签: javascript asp.net-ajax

对不起,我对这个标题的描述不够,我将在下面详细说明:

我有一个Web应用程序,我想实现一些AJAX功能。目前,它运行的是带有VB.NET代码隐藏的ASP.NET 3.5。我当前的“问题”是我想在用户点击列表中的项目时动态地填充DIV。列表项目当前包含应出现在DIV中的内容的HttpUtility.UrlEncode()(ASP.NET)字符串。

示例:

    <li onclick="setFAQ('The+maximum+number+of+digits+a+patient+account+number+can+contain+is+ten+(10).');">
What is the maximum number of digits a patient account number can contain?</li>

我可以使用JavaScript函数unescape()部分解码字符串,但它不能完全解码字符串。我宁愿将JavaScript函数传递给faq ID,然后以某种方式将数据从数据库中拉出来。

我99%肯定不可能在JavaScript函数中调用ASP函数,所以我有点难过。我是AJAX / ASP.NET的新手,所以这对我来说是一次学习经历。

2 个答案:

答案 0 :(得分:2)

首先,如果您在页面加载时从数据库中提取问题,那么您很可能也会得到所有答案,所以只需在代码示例正在执行时将答案插入页面,继续使用当前的方法。除非您的常见问题列表有成千上万的问题,否则在每次点击列表项时点击数据库“AJAX方式”并不会给您带来太多的IMO。如果它确实有那么多问题,那么直接列表是错误的方式。

其次,要记住两件事情:

  1. 你将html放在html属性中
  2. 该属性指定要调用的javascript函数
  3. 所以你需要确保你的“回答”逃脱html 都是有效的js。有效的js我的意思是它不能有新的行,必须正确地转义引号。例如,以下html - 虽然有效的html - 不会触发onclick,你只会得到一个js语法错误:

    <li onclick="setFAQ('This line's
    multi line and has a single quote in it!')"
    

    考虑到这些,我会说HttpUtility.HtmlAttributeEncodeSystem.Web.Script.Serialization.JavaScriptSerializer一起更适合您展示的标记。

    JavaScriptSerializer json = new JavaScriptSerializer();
    string answerString = "This line's\nmulti line and has a single quote in it!";
    string onClickJS = String.Format("setFAQ({0})", json.Serialize(answerString));
    string onClickAttr = HttpUtility.HtmlAttributeEncode(onClickJs);
    

    更好的是,使用.NET的ListItem对象并完全丢失HtmlAttributeEncode

    ListItem faqItem = new ListItem(questionString);
    faqItem.Attributes.Add("onclick", String.Format("setFAQ({0})", json.Serialize(answerString)));
    

    html部分会自动为您转义,而且它更清晰。

    至于您的javascript,您无需在setFAQ()中解码任何内容。只要把它的论点放进你的“回答”div:

    function setFAQ(answer) {
        document.getElementById('answer').innerHTML = answer
    }
    

答案 1 :(得分:0)

我认为只使用HttpUtility.HtmlEncode可以解决您的问题。我不确定我完全遵循:\