对不起,我对这个标题的描述不够,我将在下面详细说明:
我有一个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的新手,所以这对我来说是一次学习经历。
答案 0 :(得分:2)
首先,如果您在页面加载时从数据库中提取问题,那么您很可能也会得到所有答案,所以只需在代码示例正在执行时将答案插入页面,继续使用当前的方法。除非您的常见问题列表有成千上万的问题,否则在每次点击列表项时点击数据库“AJAX方式”并不会给您带来太多的IMO。如果它确实有那么多问题,那么直接列表是错误的方式。
其次,要记住两件事情:
所以你需要确保你的“回答”逃脱html 和都是有效的js。有效的js我的意思是它不能有新的行,必须正确地转义引号。例如,以下html - 虽然有效的html - 不会触发onclick,你只会得到一个js语法错误:
<li onclick="setFAQ('This line's
multi line and has a single quote in it!')"
考虑到这些,我会说HttpUtility.HtmlAttributeEncode
与System.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
可以解决您的问题。我不确定我完全遵循:\