doPostBack из C # с помощью JavaScript

привет У меня есть одна родительская страница, которая открывает всплывающее окно, и пользователь вносит некоторые изменения на дочерней всплывающей странице, а затем нажимает кнопку сохранения. Когда пользователь нажимает кнопку сохранения, я хочу выполнить PostBack на родительской странице, чтобы изменения, сделанные во всплывающем окне, можно было увидеть в родительском окне.

Вопрос: Как я могу реализовать описанный выше сценарий?

Хочу записать код скрипта в файл aspx.cs, пробовал

string script = "";
script = "<script>window.opener.__doPostBack('UpdatePanel1', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);

но это ничего не дало, никаких ошибок просто ничего.

Я новичок в JavaScript, мне нужна помощь на всех этапах.


person Bastardo    schedule 27.05.2011    source источник
comment
Вам не нужны теги скрипта, есть логический параметр для их включения при вызове ScriptManager.RegisterClientScriptBlock (...)   -  person nickytonline    schedule 27.05.2011


Ответы (4)


Родительская страница:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <div>
            <asp:Literal runat="server" ID="ChildWindowResult" />
        </div>
        <hr />
        <input type="button" value="Open Dialog" onclick="window.open('MyDialog.aspx', 'Dialog');" />
        <asp:Button ID="HiddenButtonForChildPostback"  runat="server"
            OnClick="OnChildPostbackOccured" style="display: none;" />
        <asp:HiddenField runat="server" ID="PopupWindowResult"/>
    </ContentTemplate>
</asp:UpdatePanel>

Страница MyDialog:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
    function postData() {
        var resultField = $("input[type='hidden'][id$='PopupWindowResult']", window.opener.document);
        var parentPosDataButton = $("[id$='HiddenButtonForChildPostback']", window.opener.document);

        resultField.val($("#<%= SomeValueHiddenField.ClientID  %>").val());
        parentPosDataButton.click();
    }
</script>

<asp:TextBox runat="server" ID="SomeValueHiddenField" />
<asp:Button runat="server" OnClick="PostData" Text="Click Me" />

protected void PostData(object sender, EventArgs e)
{
   SomeValueHiddenField.Value = DateTime.Now.ToString();
   ClientScript.RegisterStartupScript(this.GetType(), "PostData", "postData();", true);
}

Но я считаю, что было бы намного лучше использовать здесь некоторые всплывающие элементы управления, такие как PopUpExtender из библиотеки AjaxControlToolkit или диалог из jQuery-UI.

person Yuriy Rozhovetskiy    schedule 30.05.2011

Вероятно, вам нужно использовать ClientID:

string script = "";
script = "<script>window.opener.__doPostBack('" + UpdatePanel1.ClientID + "', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);
person Code Maverick    schedule 27.05.2011
comment
Что ж ... честно говоря, я не читал весь вопрос, я просто видел ваш __doPostBack, и в ASP.NET он искажает идентификатор для элементов управления runat = server, поэтому вы всегда должны использовать полный ClientID в __doPostBack. - person Code Maverick; 27.05.2011
comment
Почему бы вам просто не выполнить UpdatePanel1.update(); из кода программной части во всплывающем окне? - person Code Maverick; 27.05.2011
comment
Скотт, я думаю, вам чего-то не хватает, я пытаюсь выполнить обратную передачу в панель обновления родительской страницы на дочерней странице (всплывающая страница). Кроме того, я попробую это, спасибо. - person Bastardo; 30.05.2011
comment
В качестве контрольного идентификатора в __do PostBack необходимо использовать UniqueID, а не ClientID. - person Ray; 30.05.2011
comment
@Ray, спасибо, мистер Рэй, я должен признать, что я новичок, когда дело касается JavaScript. - person Bastardo; 31.05.2011
comment
@Ray - Спасибо. Я не думал; это привычка использовать ClientID с JavaScript. ClientID использует символы подчеркивания для объединения идентификатора элемента управления с его контейнерами для использования на стороне клиента, в то время как UniqueID использует знаки доллара для объединения идентификатора элемента управления с его контейнерами для использования на стороне сервера. - person Code Maverick; 31.05.2011

Последний параметр - включать ли тег скрипта или нет.

Итак, если вы это сделаете

RegisterClientScriptBlock(page,type, "<script>foo();</script>", true);

В итоге вы получите:

"<script><script>foo();</script></script>"

Итак, измените последний параметр на false или, что еще лучше, удалите теги в строке

person Ortiga    schedule 27.05.2011

Просмотрите следующее предлагаемое решение:

http://livshitz.wordpress.com/2011/06/12/use-popup-to-postbackupdate-its-parentopener-without-losing-viewstate-values-and-close/#more-16

person Livshitz    schedule 12.06.2011