如何在表单提交后才在表单上显示Reset按钮?

本文关键字:显示 Reset 按钮 表单提交 表单 | 更新日期: 2023-09-27 18:07:17

表单提交后,它恢复到原始状态(在大多数情况下),我们希望有一个" 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
}

但是最后一行(按钮被添加到页面的(这是)控件),它失败了:

包含。用户代码未处理HttpException消息=失败加载viewstate。视图状态所在的控件树加载的必须与用于保存视图状态的控件树相匹配在前一个请求期间。例如,在添加控件时动态地,在回发期间添加的控件必须与类型匹配以及在初始请求期间添加的控件的位置。
源=系统。Web ErrorCode=-2147467259在System.Web.UI.Control。savedState LoadViewStateRecursive(对象)在System.Web.UI.Control。adddedcontrol (Control Control, Int32索引)在DirectPaymentSectionsWebPart.DPSVisualWebPart.DPSVisualWebPartUserControl.Page_Load(对象sender, EventArgs e)在System.Web.Util.CalliHelper。EventArgFunctionCaller(IntPtr fp, Object 0, Object t, EventArgs e)在System.Web.Util.CalliEventHandlerDelegateProxy。回调(对象发送者,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时),通过从git-go添加控件到"this",像这样:

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为真时。当然,有可能有一个元素显示后回发,但不之前…但如何?

如何在表单提交后才在表单上显示Reset按钮?

在这里创建一个新按钮已经结束了。

就像这样把按钮放在视图上,并使它可见=false。

<asp:Button id="btnStartNewDirPay" ClientIDMode="Static" Text="Reset" runat="server" Visible="False" />

将其ClientIDMode设置为static,以便更容易通过jQuery获得id。

然后在保存结束时将可见设置为true。

if(IsPostBack)
{
    ....
    btnStartNewDirPay.Visible = true;
}
在前端,然后有一个点击监听器
$(document).ready(function(){
    $("#btnStartNewDirPay").click(function(){
        //Reset inputs to default values.
    })
})