2016-09-13 6 views
0

У меня есть этот Aspx сценарий для кнопки для всплывающего окна:кнопку Asp, чтобы открыть новую страницу, не представить

<asp:Button ID="btnNewEntry" Text="Post Code Search" OnClick="btnNewEntry_Click" runat="Server" target="_blank"/> 

и позади:

protected void btnNewEntry_Click(object sender, EventArgs e) 
{ 


ClientScript.RegisterStartupScript(this.Page.GetType(), "", "window.open('../search/postcode_search/Default.aspx?code="+ p +"','Post Code Search','width=800,height=300,left=100,top=100,resizable=yes'); popup_handle.focus();", true); 

} 

Но как кнопка нажата в поп- вверх, но родительская страница обновляется. Почему это так? любая работа вокруг?

+1

изменить html на GANI

+0

Я не могу. Мне нужно использовать функцию asp. –

ответ

1

Страница была обновлена ​​при получении запроса на сервер, а серверные элементы управления, такие как Button, имеют свойство AutoPostback = true по умолчанию, что означает, что каждый раз, когда нажимается, происходит отключение к серверу. Установите AutoPostback = false для кнопки вставки, и это поможет вам.

or  

Add OnClientClick="return false;" , 

<asp:button ID="btninsert" runat="server" text="Button" OnClientClick="return false;" /> 
+0

не на клиенте, нажмите, что ему нужно, чтобы запустить этот window.open? Если вы просто вернете false, он никогда ничего не выполнит или не сообщит клик. Отключение автоповтора - это правильный подход, так как это не позволит сделать обратный переход на сервер. Тем не менее, я бы предложил элемент управления, который не является серверной, и это просто открывает новую страницу, которая, возможно, является страницей aspx, в которой вы нуждаетесь. Вы можете передать ему необходимую информацию из того, что у вас есть на стороне клиента. – fizch

+0

Я добавил AutoPostBack = "false" на мою кнопку, но все равно то же самое .. –

1

Возможно, небольшое объяснение того, что на самом деле происходит с вашим кодом, поможет. Мы уже обсуждали автоматическую обратную передачу, поэтому вы знаете, что нажатие этой кнопки отправит событие обратно на сервер. Страница снова инициализируется и перезагружает состояние представления и все опубликованные данные. После этого обрабатывается событие нажатия кнопки.

На этом этапе ваш код записывает сценарий window.open на страницу. Имейте в виду, что это не так специфично. Это просто скрипт, который добавляется где-то на странице и выполняется. Затем состояние просмотра обновляется, и страница отправляется обратно клиенту. Если пользователь перезагрузит страницу, этот скрипт будет выполнен снова.

Ваш лучший выбор - это преобразование только кнопки на стороне клиента. Найдите способ получить необходимые данные с сервера перед загрузкой всплывающего окна. Самый простой способ сделать это - сделать вызов AJAX и открыть всплывающее окно с успехом с вашей конечной точки.

+0

Вещь, почему я сделал это на стороне сервера, заключается в том, что мне нужно отправить данные в это всплывающее окно. Im посылает параметры url родителя где. Есть ли способ сделать это с помощью AJAX? –

+0

Данные «code = p», или есть ли дополнительная обработка, которую необходимо выполнить на стороне сервера перед загрузкой страницы? Достаточно легко вызвать конечную точку через ajax и вернуть нужный идентификатор, а затем обработать возвращаемые данные, но вы хотите. – fizch

0

Попробуйте это. Обновлено 1.

<asp:Button ID="btnNewEntry" Text="Post Code Search" OnClick="btnNewEntry_Click" runat="Server" target="_blank" 
OnClientClick="javascript:window.open('../search/postcode_search/Default.aspx?code=+ p','Post Code Search','width=800,height=300,left=100,top=100,resizable=yes').focus();return false;"/> 

Проблема возникла из-за "+ p +".

+0

Hi ADamal, im get error: Тег сервера плохо сформирован. –

+0

Эй, попробуй обновленный, он определенно сработает. – ADarnal

0

Как я уже сказал, я решил пойти на сторону клиента. Вот мой сценарий:

<button onclick="OpenPopup()" type="button">Post Code Search</button> 

и Javascript код над ним:

<script> 

function OpenPopup() { 
    var getQueryString = function (field, url) { 
    var href = url ? url : window.location.href; 
    var reg = new RegExp('[?&]' + field + '=([^&#]*)', 'i'); 
    var string = reg.exec(href); 
    return string ? string[1] : null; 
}; 
var str = getQueryString('code'); 
    if (str != null) { 
    p = str.replace(/%20/g, ' '); 
     } 
    else { 
    p = ""; 
    } 
    var url = "../search/postcode_search/Default.aspx?code=" + p; 
    window.open(url, "Post Code Search", "toolbar=no, location=no,status=yes,menubar=no,scrollbars=yes,resizable=no, width=750,height=400,left=430,top=100"); 
    return false; 
    } 


</script> 

поэтому в основном то, что он делает, он захватывает параметр из родительского окна URL и добавляет всплывающее окно URL. Мое родительское окно URL:

/Customer.aspx?code=V6E%20111 & Firstname = MyName

Я надеюсь, что это помогает для других. Спасибо за помощь.

Смежные вопросы