【问题标题】:Need help with an AJAX workflow需要 AJAX 工作流方面的帮助
【发布时间】:2009-01-07 18:01:34
【问题描述】:

对不起,我无法对标题进行更详细的描述,我将在下面详细说明:

我有一个 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() 部分解码字符串,但它不能完全解码字符串。我更愿意将常见问题 ID 传递给 JavaScript 函数,然后以某种方式从其来源的数据库中提取信息。

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

【问题讨论】:

    标签: javascript asp.net-ajax


    【解决方案1】:

    首先,如果您在页面加载时从数据库中提取问题,那么您很可能也拥有所有答案,因此只需在代码示例执行过程中将答案塞入页面中即可继续使用当前方法.除非您的常见问题解答列表有成千上万个问题,否则通过在每次单击列表项时点击数据库来执行“AJAX 方式”在 IMO 中不会给您太多帮助。如果它确实有这么多问题,那么直接列出无论如何都是错误的。

    其次,你的方法要记住两点:

    1. 您将 html 放置在 html 属性中
    2. 该属性指定要调用的 javascript 函数

    因此,您需要确保您的“答案”同时转义 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 很好的答案,我不敢相信在今天之前没有人投票。
    • @magnifico:谢谢。到底是什么让你想到了这个老问题?
    • 只是浏览未回答的问题列表 ;)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多