2015-08-10 3 views
0

После того, как форма отправляется, она возвращается в исходное состояние (по большей части), и мы хотим иметь кнопку «Reset», которая позволяет пользователю запустить страницу «afresh». Я надеялся, что я мог бы определить и настроить HtmlButton в коде:Как я могу отобразить кнопку сброса в форме ony после отправки формы?

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 был необработанное с помощью кода пользователя Message = Не удалось для загрузки viewstate. Дерево управления, в которое отображается состояние просмотра , должно соответствовать дереву управления, которое использовалось для сохранения viewstate во время предыдущего запроса. Например, при динамическом добавлении элементов управления элементы управления, добавленные во время обратной связи, должны соответствовать типу и позиции элементов управления, добавленных во время первоначального запроса.
Источник = System.Web ErrorCode = -2147467259 StackTrace: в System.Web.UI.Control.LoadViewStateRecursive (Object savedState) на System.Web.UI.Control.AddedControl (контроль управления, индекс Int32) в DirectPaymentSectionsWebPart. DPSVisualWebPart.DPSVisualWebPartUserControl.Page_Load (Объект отправителя, EventArgs е) в System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr Ф.П., объект О, объект т, EventArgs е) в System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Object отправителя, EventArgs e) в System.Web.UI.Control.OnLoad (EventArgs e) в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Control.LoadR ecursive() в 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 был ложным), добавив элемент управления к этому «из» 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 верно.

Так что не позволит мне создать экземпляр и скрыть HtmlButton в начале, а затем показать его, когда IsPostBack является true, и это не позволит мне отложить создание экземпляра, когда IsPostBack истинно, кажется. Возможно, у него есть элемент, который отображается после обратной передачи, но не до этого ... но как?

ответ

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. 
    }) 
}) 
+0

Не должно ли быть «тип =» сброс «» там тоже? –

+1

Ну, моя реализация не будет использовать тип кнопки сброса. Я бы просто использовал jquery/js, чтобы очистить поля, которые вы могли бы легко сделать. Простой '$ ('form'). Find (" input [type = text], textarea "). Val (" ");'. Таким образом, у вас есть немного больше контроля над тем, что вы перезагружаете. – mattfetz

+0

Интересная идея, но мне это нужно, чтобы работать на всей странице, у которой нет форм. Есть ли jQuery «стенография» для «всего» (сама страница не имеет идентификатора, на который можно ссылаться, я не думаю). –

 Смежные вопросы

  • Нет связанных вопросов^_^