表单提交后,如何在表单上显示“重置”按钮?

时间:2015-08-10 21:09:43

标签: c# jquery sharepoint-2010 htmlbutton ispostback

表单提交后,它会恢复到原始状态(大部分时间),我们希望有一个“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";
} 

...然后仅在postbackform已提交之后)实例化它,如下所示:

if (Page.IsPostBack) 
{
    if (null == btnStartNewDirPay)
    {
        CreateAndConfigureButtonStartNewDirectPayment();
    }
    this.Controls.Add(btnStartNewDirPay); //this causes problems
}

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

  

System.Web.HttpException未被用户代码Message = Failed处理   加载viewstate。 viewstate所在的控制树   loaded必须与用于保存viewstate的控制树匹配   在上一个请求期间。例如,添加控件时   动态地,回发期间添加的控件必须与类型匹配   在初始请求期间添加的控件的位置   Source = System.Web ErrorCode = -2147467259 StackTrace:          在System.Web.UI.Control.LoadViewStateRecursive(Object savedState)          在System.Web.UI.Control.AddedControl(控件控件,Int32索引)          在DirectPaymentSectionsWebPart.DPSVisualWebPart.DPSVisualWebPartUserControl.Page_Load(Object   发件人,EventArgs e)          在System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)          在System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,   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(布尔includeStagesBeforeAsyncPoint,布尔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是真的时候。肯定有一个元素可以在回发之后但不是之前显示......但是如何?

1 个答案:

答案 0 :(得分:1)

在这里创建一个新按钮。

只需在视图上按下按钮并使其可见= false。

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

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

然后在保存设置结束时回发后,可见为真。

if(IsPostBack)
{
    ....
    btnStartNewDirPay.Visible = true;
}

在前端然后有一个点击监听器

$(document).ready(function(){
    $("#btnStartNewDirPay").click(function(){
        //Reset inputs to default values.
    })
})
相关问题