Нужна помощь с рабочим процессом AJAX - PullRequest
1 голос
/ 07 января 2009

Извините, я не могу описать название более подробно, я подробно остановлюсь ниже:

У меня есть веб-приложение, в которое я хочу реализовать некоторые функции AJAX. В настоящее время он работает под управлением ASP.NET 3.5 с кодом VB.NET. Моя текущая «проблема» заключается в том, что я хочу динамически заполнять DIV, когда пользователь щелкает элемент в списке. Элемент списка в настоящее время содержит HttpUtility.UrlEncode() (ASP.NET) строку содержимого, которое должно появиться в DIV.

Пример:

    <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, а затем каким-то образом извлечь информацию из базы данных, из которой она происходит.

Я на 99% уверен, что невозможно вызвать функцию ASP из функции JavaScript, поэтому я немного озадачен. Я новичок в AJAX / ASP.NET, так что это опыт обучения для меня.

Ответы [ 2 ]

2 голосов
/ 09 января 2009

Прежде всего, если вы извлекаете вопросы из базы данных при загрузке страницы, у вас, скорее всего, тоже есть ответы на все вопросы, так что просто продолжайте свой текущий подход, вставляя ответы на страницу, как это делает ваш пример кода. , Если ваш список часто задаваемых вопросов не содержит тысячи и тысячи вопросов, выполнение этого «AJAX-пути» путем нажатия на кнопку «db» при каждом щелчке элемента списка не даст вам особого значения в ИМО. Если у него так много вопросов, тогда прямой список - неправильный путь.

Во-вторых, необходимо помнить о двух вещах:

  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.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 1021 *. Потерять 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
}
0 голосов
/ 07 января 2009

Я думаю, что использование HttpUtility.HtmlEncode может решить вашу проблему Я не уверен, что полностью следую, хотя: \

...