Javascript 需要AJAX工作流的帮助吗

Javascript 需要AJAX工作流的帮助吗,javascript,asp.net-ajax,Javascript,Asp.net Ajax,很抱歉,我无法对标题进行更详细的描述,我将在下面详细阐述: 我有一个web应用程序,我想在其中实现一些AJAX功能。目前,它正在运行ASP.NET 3.5和VB.NET codebehind。我当前的“问题”是,当用户单击列表中的某个项目时,我希望能够动态地填充DIV。列表项当前包含应显示在DIV中的内容的HttpUtility.UrlEncode()(ASP.NET)字符串 例如: <li onclick="setFAQ('The+maximum+number+of+digits

很抱歉,我无法对标题进行更详细的描述,我将在下面详细阐述:

我有一个web应用程序,我想在其中实现一些AJAX功能。目前,它正在运行ASP.NET 3.5和VB.NET codebehind。我当前的“问题”是,当用户单击列表中的某个项目时,我希望能够动态地填充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()
部分解码字符串,但它不能完全解码字符串。我更愿意将faq ID传递给JavaScript函数,然后以某种方式从数据库中提取信息


我99%确信不可能从JavaScript函数中调用ASP函数,所以我有点困惑。我对AJAX/ASP.NET有点陌生,所以这对我来说是一次学习经历

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

首先,如果你在页面加载时从数据库中提取问题,你很可能也有所有的答案,所以只要继续使用你当前的方法,就像你的代码示例那样将答案塞进页面。除非你的FAQ列表中有成千上万的问题,否则通过点击列表项上的db来“AJAX方式”并不会给你带来太多问题。如果它确实有那么多问题,那么直接列表无论如何都是错误的方式

第二,在您的方法中需要记住两件事:

  • 您正在将html放置在html属性中
  • 该属性指定要调用的javascript函数
  • 因此,您需要确保您的“答案”同时转义html和js。有效的js意味着它不能有新行,必须正确地转义引号。例如,下面的html虽然是有效的html,但不会触发onclick,您只会得到一个js语法错误:

    <li onclick="setFAQ('This line's
    multi line and has a single quote in it!')"
    
    更好的方法是,使用.NET的
    ListItem
    对象,并将
    HtmlatTributeNCode
    全部删除:

    ListItem faqItem = new ListItem(questionString);
    faqItem.Attributes.Add("onclick", String.Format("setFAQ({0})", json.Serialize(answerString)));
    
    html部分会自动为您转义,而且更干净

    至于javascript,您不必在
    setFAQ()
    中解码任何内容。把它的论点写进你的“回答”部分:


    +回答得很好,我不敢相信今天之前没有人投票通过。@magnifico:谢谢。是什么让你想到这个老问题的?只是浏览未回答的问题列表;)
    ListItem faqItem = new ListItem(questionString);
    faqItem.Attributes.Add("onclick", String.Format("setFAQ({0})", json.Serialize(answerString)));
    
    function setFAQ(answer) {
        document.getElementById('answer').innerHTML = answer
    }