ASP.NET, как использовать __doPostBack из пользовательского JavaScript с мастер-страницами - PullRequest
2 голосов
/ 14 июня 2010

На простой странице aspx у меня может быть пользовательская функция обратной передачи JavaScript, как описано в http://www.xefteri.com/articles/show.cfm?id=18 На простой странице используется кнопка ссылки:

<asp:LinkButton id="CreateFile" runat="server" onclick="CreateFile_Click" />

с кодом позади, в котором есть подпрограмма VB:

Sub CreateFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

и пользовательская функция Javascript, которая выполняет:

 __doPostBack('CreateFile','');

Когда я перемещаю код на страницу содержимого с соответствующей главной страницей, простой пример больше не работает.

Мне известно, что идентификаторы управления сервером меняются в сгенерированном HTML, когда используется главная страница, и я использую правильные идентификаторы в Javascript.Например, для идентификатора LinkButton я использую «<% = CreateFile.ClientID%>» для JavaScript в сгенерированном HTML.Тем не менее, я до сих пор не могу понять, как получить постбэки из Javascript, когда задействованы главные страницы.Точнее, с главной страницей в миксе код даже не скомпилируется, но в результате:

'CreateFile_Click' is not a member of 'ASP.testmaster_aspx'

Если я удаляю onclick = "CreateFile_Click" из разметки LinkButton, он компилируется, но не работает.Аналогично, если onclick удаляется из более простой версии без главной страницы, он также не работает, как и ожидалось.

Любой вклад в то, как получить обратную передачу из пользовательской функции Javascript при использовании мастер-страниц, будет высоко оценен.

Ответы [ 2 ]

1 голос
/ 22 мая 2012

Сделайте это.

Сохраните JavaScript, который вызывает функцию __dopostback, на вашей главной странице.На каждой странице, требующей вызова do post back для автоматического обновления после события, поместите кнопку и скройте ее, используя «style = display: none» (в этом примере я называю эту кнопку «btndp») исобытие нажатия этой кнопки asp напишите код, который вы хотите запустить в __dopostback.Теперь JavaScript требует ID элемента, в то время как ASP требует имя элемента, поэтому в вашем JavaScript на главной странице сделайте это

var btnName = $get("content_btndp").name;
__doPostBack(btnName, "");

Вы видите здесь, мы сначала получили имя элемента, используя идентификатор, а затем передалиимя функции __dopostback.Таким образом, на каждой содержательной странице вы можете поместить невидимую кнопку с тем же именем, и ваш единственный скрипт на главной странице будет служить всем.

Надеюсь, это решит вашу проблему.

1 голос
/ 14 июня 2010

Вы жестко кодируете вызов __doPostBack?

попробуйте использовать Page.GetPostBackEventReference

, чтобы получить действительный дескриптор в вашем JavaScript.

как только вы напишите действительную ссылку на событие обратной отправки, вы можете заключить ее в локальную функцию, которую вы можете затем вызвать с главной страницы.

if (window.myPostBackfunction) // check if it exists
  myPostBackFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...