Лучший метод должен был бы, вероятно, определить и оценка содержание блока сценария непосредственно через DOM.
я был бы осторожен хотя.. при реализации этого для преодоления ограничения некоторых от вызова сайта, Вы открываете дыру в системе безопасности.
Независимо от того, что Вы реализуете, мог быть использован для XSS.
Похоже, вы неправильно используете функцию UpdatePanel. Если UpdatePanel настроен на обновление, когда дочерние элементы запускают события, обновлять должна только UpdatePanel, а не вся страница. Похоже, что приведенный ниже код ведет себя аналогично тому, что вы ищете. При изменении раскрывающегося списка на сервер отправляется только панель обновлений, а при обновлении страницы вы можете получить значение вне сеанса.
КОД ASPX
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
Current Time: <asp:Label ID="lblTime" runat="server" /><br />
Session Value: <asp:Label ID="lblSessionValue" runat="server" /><br />
<br />
<asp:UpdatePanel ID="upSetSession" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlMyList" runat="server"
onselectedindexchanged="ddlMyList_SelectedIndexChanged"
AutoPostBack="true">
<asp:ListItem>Select One</asp:ListItem>
<asp:ListItem>Maybe</asp:ListItem>
<asp:ListItem>Yes</asp:ListItem>
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlMyList"
EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
КОД СЗАДИ
protected void Page_Load(object sender, EventArgs e)
{
this.lblTime.Text = DateTime.Now.ToShortTimeString();
if (Session["MyValue"] != null)
this.lblSessionValue.Text = Session["MyValue"].ToString();
}
protected void ddlMyList_SelectedIndexChanged(object sender, EventArgs e)
{
Session.Remove("MyValue");
Session.Add("MyValue", this.ddlMyList.SelectedValue);
}
Чтобы получить что-либо, сохраненное в сеансе, вы должны отправить это на сервер.
Возможно, некоторые дополнительные сведения о том, почему вы не хотите обновлять UpdatePanel, были бы полезны, и что вы пытаетесь достичь, используя значение в Session.
EDIT: Судя по вашим комментариям, кажется, что мне, что решением было бы сохранить текущий файл .ascx в сеансе и настроить для вашего DropDownList автоматическую отправку сообщений.
Итак, при работе с кнопками «Далее» и «Назад» сохраните индикатор для правильного .ascx в сеанс.
Во время обратной обработки события dropdownlist вы можете просто убедиться, что текущий файл .ascx все еще отображается, проверив сеанс для отображения правильного файла. Когда результат будет возвращен клиенту, ничего не изменится,
большое спасибо Я решил проблему, управляя переменными в событии Page_Load.
If Label1.Text = 1 Then
Dim tempcontrol2 As Control = LoadControl("Page1.ascx")
PlaceHolder1.Controls.Add(tempcontrol2)
ElseIf Label1.Text = 2 Then
Dim tempcontrol2 As Control = LoadControl("Page2.ascx")
PlaceHolder1.Controls.Add(tempcontrol2)
End If
спасибо за все ответы
Похоже, вы делаете гораздо больше работы, чем нужно. Вы изучали возможность использования ASP.NET Wizard Control? http://msdn.microsoft.com/en-us/magazine/cc163894.aspx или просто Google.
Если вы все еще хотите делать это по-своему, у вас есть для отправки на сервер (либо без автоматической отправки + нажатие кнопки отправки вручную, либо путем включения автоматической отправки), поскольку Сессия является концепцией на стороне сервера. HTTP - это протокол без состояния, поэтому единственная концепция состояния должна выполняться вне домена HTTP. Это означает, что вы застряли в сохранении состояния на сервере (например, в сеансе) или, что гораздо более строго, на компьютере клиента (например, в файле cookie).