Как открыть перенаправленную страницу из Iframe, чтобы открыть в родительском окне в ASP.NET? - PullRequest
4 голосов
/ 16 февраля 2011

У меня есть страница asp.net, которая содержит Iframe, встроенный с некоторыми данными, и ImageButton.На событии щелчка ImageButton (на стороне сервера) у меня есть Response.Redirct:

Response.Redirect("results.aspx");

Это всегда открывает results.aspx в iframe.Я хочу, чтобы результаты .aspx всегда открывались в родительском окне.До сих пор я пробовал следующее, но ничего не получалось:

Response.Redirect("<script language='javascript'>self.parent.location='results.aspx';</script>");
Response.Redirect("javascript:parent.change_parent_url('results.aspx');");

В ответ на вопрос Рифка я добавил ClientScriptManager..aspx имеет эту запись:

<asp:ImageButton ID="ImageButton_ok" ImageUrl="~/images/ok.gif"
        OnClick="btnVerify_Click" OnClientClick="ValidateFields()" 
        runat="server"  />

Код в Page_Load ():

ClientScriptManager cs = Page.ClientScript;
StringBuilder myscript = new StringBuilder();
myscript.Append("<script type=\"text/javascript\"> function ValidateFields() {");
myscript.Append("self.parent.location='default.aspx';} </");
myscript.Append("script>");
cs.RegisterClientScriptBlock(this.GetType(), "ButtonClickScript", myscript.ToString());

btnVerify_Click имеет основную бизнес-логику.Как я остановлю OnClientClick () для запуска, если моя бизнес-логика не работает?или, как я могу запустить, когда серверный код успешно выполняется?

Ответы [ 6 ]

8 голосов
/ 16 февраля 2011

Response.Redirect будет влиять только на страницу в iFrame, если это страница, которая выполняет перенаправление на стороне сервера.Вы хотите запустить некоторый javascript внутри этого iFrame, который будет перенаправлять родительский элемент, как у вас во втором примере.Чтобы запустить скрипт, вам не следует использовать Response.Redirect (), а нужно зарегистрировать клиентский скрипт.

См. Следующую ссылку, чтобы узнать, как зарегистрировать клиентский скрипт в своем коде в ASP..Net 2.0 - Использование Javascript с ASP.Net 2.0

Например, вы добавили бы нечто похожее на это в конце вашего мероприятия, которое обрабатывает ImageButton Click:

this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myUniqueKey",
                    "self.parent.location='results.aspx';", true);
2 голосов
/ 06 мая 2011

У меня есть страница asp.net, которая содержит встроенный Iframe с некоторыми данными и кнопками.На событие нажатия кнопки (на стороне сервера) у меня есть Response.Redirct, но мне нужно закрыть Iframe и загрузить родительскую страницу. Добавление указанного ниже сценария решило проблему.

1 голос
/ 16 апреля 2014

Вы можете попробовать это:

Response.Write("<script>window.open('page.aspx','_parent');</script>");

Привет.

1 голос
/ 18 февраля 2011

Спасибо Рифку за решение.Вот код для тех, у кого похожая проблема:

В файле aspx я определил новую функцию JS Redirection ().Функция ValidateFields () будет выполнять некоторые проверки на стороне клиента.

<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript">
    function ValidateFields()
    {
        alert ("Some client side validations!!");
    }

    function Redirection()
    {
        self.parent.location="http://www.google.com";
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2>Content - In IFrame</h2>
        <asp:CheckBox ID="chkValid" runat="server" />
        <asp:ImageButton ID="ImageButton_FillW8Online" ImageUrl="~/images/expand.gif"
        OnClick="btnVerify_Click" OnClientClick="return ValidateFields()"
            runat="server" style="height: 11px" />

    </div>
    </form>
</body>

в коде позади, у меня очень простой код, который регистрирует clientcriptblock после выполнения некоторых проверок на стороне сервера.Я требовал, чтобы перенаправление происходило только в том случае, если проверка на стороне сервера прошла успешно.

bool isValid = false;
protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnVerify_Click(object sender, EventArgs e)
{            
    //do some validations
    isValid = chkValid.Checked;
    if (isValid)
        this.Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", "Redirection()", true);
}
0 голосов
/ 28 мая 2015

Если вы просто хотите открыть веб-сайт непосредственно «поверх» текущей страницы с помощью своего iframe (не новой вкладки или окна), то вам не нужен код позади.

е:

<asp:LinkButton ID="lnkGeneralEnq" runat="server" OnClientClick="OpenOverFrame();"><strong>click this link</strong></asp:LinkButton>

и однострочный Java-скрипт на вашей странице ASPX ...

function OpenOverFrame() {
            window.open('http://mywebsite.com','_parent');
        }
0 голосов
/ 06 октября 2014
Response.Clear();
Header.Controls.Add(new LiteralControl(@"
<script type=""text/javascript"">
top.location = ""/Logout.aspx"";
parent.location = ""/Logout.aspx"";
</script>
"));
...