Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET按钮事件在按下后退按钮时激发_C#_Asp.net_Postback_Viewstate - Fatal编程技术网

C# ASP.NET按钮事件在按下后退按钮时激发

C# ASP.NET按钮事件在按下后退按钮时激发,c#,asp.net,postback,viewstate,C#,Asp.net,Postback,Viewstate,我有一个asp.net站点(C#后端),可以从数据库加载信息。它允许用户通过单击添加/删除按钮保存信息。此按钮会根据用户是否已保存而动态更改。我使用命令名和参数来传递数据。当按下按钮时,它会停留在同一页上,只是更新外观(回发)。这在正常情况下运行良好。但是,如果用户离开页面,然后返回页面,则会对按下的按钮重新执行OnClick方法 我知道当使用back按钮时它正在进行回发,但是为什么它会触发最后一次onclick?这是正常的行为吗?我尝试过禁用缓存,试图让页面过期,但什么都不起作用。数据显示在中

我有一个asp.net站点(C#后端),可以从数据库加载信息。它允许用户通过单击添加/删除按钮保存信息。此按钮会根据用户是否已保存而动态更改。我使用命令名和参数来传递数据。当按下按钮时,它会停留在同一页上,只是更新外观(回发)。这在正常情况下运行良好。但是,如果用户离开页面,然后返回页面,则会对按下的按钮重新执行OnClick方法

我知道当使用back按钮时它正在进行回发,但是为什么它会触发最后一次onclick?这是正常的行为吗?我尝试过禁用缓存,试图让页面过期,但什么都不起作用。数据显示在中继器中,并且启用了ViewState…从我读到的内容来看,我想知道这是否是原因。但是,如果禁用ViewState,则回发时不会显示任何结果。如果是问题所在,是否有其他方法可以让数据在不使用Viewstate的情况下在中继器中动态更新?不确定它是否有任何帮助,但是下面是显示commandname和参数的按钮标记

<asp:Repeater ID="ItemRepeater" runat="server" EnableViewState="true">
    <!--Lots of other code before pressed button-->
    <asp:Button ID="additembutton" runat="server" OnClick="AddDelOnClick" Text='<%# textToDisplay((int)Eval("isSaved")) %>'
     CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>' 
     CommandArgument='<%# DataBinder.Eval(Container.DataItem, "itemnumber").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "department").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "itemdescription").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim()%>'
     CssClass='<%# cssClassToDisplay((int)Eval("isSaved")) %>' /></td></tr>

我会选择“正常行为”。这对我来说一直是个难题,我的超级优雅的解决方案是将回发包在UpdatePanel中…这会导致其他问题和需求,但至少“后退”按钮不会触发任何东西,而且我似乎永远无法控制我的最终用户

    <asp:ScriptManager id="smPage" runat="server"/>

    <asp:UpdatePanel id="upPnlRepeater" runat="server">
        <ContentTemplate>
            <asp:Repeater id="YourRepeater">
            </asp:Repeater>
        </ContentTemplate>
    </asp:UpdatePanel>

很快就得到了这个……应该在问之前再坚持一会儿。更改:

CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>'

并且将后端代码更改为仅更改commandargument。

有趣的是,我还有另一个页面做了类似的事情(只是更新而不是添加/删除),使用back时效果很好。除了如何使用commandname,我还没有发现任何不同之处,但到目前为止,这并没有给我带来任何运气。这里的代码是在母版页上还是在带有控件的页面上完成的?好的,看起来这仍然是正常的行为,但在解决了所有问题后,更改命令参数确实让我达到了需要的位置。我似乎总是在发帖后立即回答自己的问题。
CommandName='AddorDelete'