Я пробовал почти все предлагаемые решения, которые размещены здесь и связаны с моей проблемой без везения. Я создаю несколько графиков (используя библиотеку Dygraphs). Следующий код javascript - это всего лишь небольшая часть всей функции; на самом деле я создаю 5 графиков таким образом.<%=values%> не обновляется внутри панели обновления
<script>
designRawGraphs();
function designRawGraphs()
{
var g1 = new Dygraph(
document.getElementById("graphdiv"),
[ <%=sDataForROI1Graph%> ],
{
labels: <%=sLabelsForROI1Graph%>,
connectSeparatedPoints: true,
animatedZooms: true,
highlightCircleSize: 3,
highlightSeriesOpts: {
highlightCircleSize: 6
},
drawPoints: true,
title: 'ROI 1 - Region of Interest',
ylabel: 'Raw Fluorence Intensity',
xlabel: 'Time (seconds)'
}
);
}
</script>
В коде позади, я сериализовать (и служить String
) как sDataForROI1Graph и sLabelsForROI1Graph глобальные переменные, которые заполняются в результате запроса к базе данных в определенном формате (ожидаемая формат для Dygraphs). Этот код javascript находится внутри asp:UpdatePanel
. Когда я запускаю кнопку (которая также находится внутри одной и той же UpdatePanel), запрос возвращает разные результаты, поэтому оба файла sDataForROI1Graph и sLabelsForROI1Graph изменены, но графики не перепроектированы (а именно, значения глобальных переменных не передаются от кода позади до клиентской стороны с помощью метода <% = =>). Я также объявил Trigger
опцию обожженного кнопки, как показано ниже ...
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RemoveAllbtn" />
</Triggers>
... и мой код просто просто, как показано в следующем фрагменте кода (на самом деле я повторно запустить хранимую процедуру, которая обновляет в 2 глобальные переменные sDataForROI1Graph и sLabelsForROI1Graph с новыми значениями)
Protected Sub RemoveAllbtn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles RemoveAllbtn.Click
RemoveAll()
End Sub
Если удалить UpdatePanel, все работает как шарм, потому что полный пост-обратно происходит. Я попытался ввести код javascript и выполнить другие сложные предложения, но пока не нашел обходного пути.
Вопрос: почему эти две глобальные переменные недоступны с клиентской стороны, когда они вложены в UpdatePanel? Какой подход лучше всего обойти эту проблему? Я также читал о скрытых элементах Textboxes/HiddenFields/Labels/Literals, но даже эти подходы не помогли мне решить мою проблему.
EDIT
Следует признать, что предложенный ответ ниже, что мне нужно, и она отлично работает, НО после много часов проводить на мой вопрос и стучал головой о стену, я понял, что мой проблема остается, и причина слишком странная. В стороне клиента, вне UpdatePanel
я создал <asp:HiddenField ID="hidfieldforROI1" runat="server"/>
, что я пытаюсь получить его значение, как это
var dataforROI1 = document.getElementById('<%= hidfieldforROI1.ClientID %>').value;
На заднем конце я устанавливаю Value
к контролю hidfieldforROI1. И я получаю следующую ошибку странно:
error BC30451: 'dataforROI1' is not declared. It may be inaccessible due to its protection level.
Я был бы признателен за любые предложения.
Замените 'Literal' Control? '[ asp: Literal>],' –
VDWWD
@VDWWD не могли бы вы сообщить мне, как получить буквенный текст на стороне клиента, используя javascript? –
Вы не можете. Вы устанавливаете значение литерала в коде позади. 'sDataForROI1Graph.Text =" yourJavaScriptStringValue ";' Он дает точно такую же клиентскую сторону результата, если вы будете использовать '<% = yourJavaScriptStringValue%>' – VDWWD