После отправки формы она возвращается в исходное состояние (по большей части), и мы хотим иметь кнопку «Reset
», которая позволяет пользователю запускать страницу «afresh
». Я надеялся, что смогу определить и настроить HtmlButton
в коде:
HtmlButton btnStartNewDirPay = null;
. . .
private void CreateAndConfigureButtonStartNewDirectPayment()
{
btnStartNewDirPay = new HtmlButton();
btnStartNewDirPay.Attributes["type"] = "reset";
btnStartNewDirPay.InnerHtml = "Start new Direct Pay";
btnStartNewDirPay.ID = "btnStartNewDirPay";
}
... и затем создайте экземпляр только на postback
(после отправки form
) следующим образом:
if (Page.IsPostBack)
{
if (null == btnStartNewDirPay)
{
CreateAndConfigureButtonStartNewDirectPayment();
}
this.Controls.Add(btnStartNewDirPay); //this causes problems
}
Но последняя строка (где кнопка добавляется к элементам управления страницы (это)), она терпит неудачу с:
Исключение System.Web.HttpException было необработано кодом пользователя. Сообщение = Не удалось загрузить состояние просмотра. Дерево элементов управления, в которое загружается состояние представления, должно совпадать с деревом элементов управления, которое использовалось для сохранения состояния представления во время предыдущего запроса. Например, при динамическом добавлении элементов управления элементы управления, добавленные во время обратной передачи, должны соответствовать типу и положению элементов управления, добавленных во время первоначального запроса.
Source=System.Web ErrorCode=-2147467259 StackTrace: в System.Web. UI.Control.LoadViewStateRecursive(Object saveState) в System.Web.UI.Control.AddedControl(элемент управления, индекс Int32) в DirectPaymentSectionsWebPart.DPSVisualWebPart.DPSVisualWebPartUserControl.Page_Load(отправитель объекта, EventArgs e) в System.Web.Util.CalliHelper. EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(отправитель объекта, EventArgs e) в System.Web.UI.Control.OnLoad(EventArgs e) в System.Web. UI.Control.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web.UI. Ко ntrol.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Page.ProcessRequestMain(логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint)
InnerException :
Я также попытался создать/настроить HtmlButton в начале (когда IsPostBack был ложным), добавив элемент управления «это» из git-go, например:
private void CreateAndConfigureButtonStartNewDirectPayment()
{
btnStartNewDirPay = new HtmlButton();
btnStartNewDirPay.Attributes["type"] = "reset";
btnStartNewDirPay.InnerHtml = "Start new Direct Pay";
btnStartNewDirPay.ID = "btnStartNewDirPay";
this.Controls.Add(btnStartNewDirPay);
}
... а затем скрыть его через jQuery:
$(window).load(function () {
. . .
$('[id$=btnStartNewDirPay]').hide();
});
... но это также не удалось в той же строке ("this.Controls.Add(btnStartNewDirPay);") в "CreateAndConfigureButtonStartNewDirectPayment()" с тем же сообщением об ошибке, что и выше, когда IsPostBack имеет значение true.
Таким образом, это не позволит мне создать и скрыть HtmlButton в начале, а затем показать его, когда IsPostBack имеет значение true; Похоже, это также не позволит мне отложить создание экземпляра до того момента, когда IsPostBack имеет значение true. Конечно, можно иметь элемент, который отображается после обратной передачи, но не до нее... но как?