Как можно отобразить кнопку "Сбросить" в форме только после ее отправки?
После отправки формы она возвращается к своему первоначальному состоянию (по большей части), и мы хотим получить "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(объект сохраненный State) в System.Web.UI.Control.AddedControl(элемент управления, индекс Int32) в DirectPaymentSectionsWebPart.DPSVisualWebWartPartPartPartPartPartPartPartPartPartPartPartPartPartPartPartPart (Отправитель объекта, 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.Control.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Control.LoadRecursive() в System.Web. UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
Я также попытался создать / настроить HtmlButton в начале (когда IsPostBack был false), добавив элемент управления "this" из 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. Конечно, возможно иметь элемент, который отображается после обратной передачи, но не до этого... но как?
1 ответ
Создание новой кнопки закончено здесь.
Просто сделайте так, чтобы кнопка была в представлении, и сделайте ее видимой =false
<asp:Button id="btnStartNewDirPay" ClientIDMode="Static" Text="Reset" runat="server" Visible="False" />
Установите для ClientIDMode значение static, чтобы было проще получить идентификатор через jQuery.
Затем на пост обратно в конце сохранения установить видимое значение true.
if(IsPostBack)
{
....
btnStartNewDirPay.Visible = true;
}
На переднем конце есть слушатель щелчка
$(document).ready(function(){
$("#btnStartNewDirPay").click(function(){
//Reset inputs to default values.
})
})