表单提交后,它会恢复到原始状态(大部分时间),我们希望有一个“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未被用户代码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是真的时候。肯定有一个元素可以在回发之后但不是之前显示......但是如何?
答案 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.
})
})