0

刚刚在我的 Web 应用程序中添加了一个新按钮,单击它时出现错误,我想知道这是否与错误放置的代码有关。我将简要描述我做了什么/在哪里。非常感谢。

在 ascx 文件中:

<asp:Button ID="btn_rezerv" runat="server" Text="Reserve film" OnClick="btn_rezerv_Click"/>  

在 ascx.cs 文件中:

namespace CinProj.UserControls
{
    public partial class FilmsList : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            PopulateControls();


        }

        private void PopulateControls()
        {
            string categId = Request.QueryString["CategID"];
            string filmId = Request.QueryString["FilmID"];
            ....


            if (categId != null)
            {
                .....
            }
            if (filmId != null)
            {
                ......
                Button btn_rezerv = (Button)item.FindControl("btn_rezerv");

            }


        }

        protected void btn_rezerv_Click(object sender, EventArgs e)
        {
            string fid = Request.QueryString["FilmID"];
            ShoppingCartAccess.AddItem(fid);
        }


    }
}

“'/'应用程序中的服务器错误。

无效的回发或回调参数。使用配置或页面中的 <%@ Page EnableEventValidation="true" %> 启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。"

4

2 回答 2

1

这可能是服务器不知道的某种客户端更改的结果。例如,很多时候这是在 JavaScript 中更改下拉列表中的值的结果。

要修复,您可以:

  1. 取消使用 JavaScript 进行上述修改
  2. 使用 UpdatePanel 并将您的控件添加到其中。如果客户端需要进行更改,请触发 UpdatePanel 的更新以更新控件的视图状态。
于 2012-06-13T20:13:28.120 回答
1

另一个问题可能是因为您的 PopulateControls 方法可能只应在页面加载期间调用,而不是 PostBack。我无法从上面看出,但对我来说,它看起来只需要在加载时完成。尝试用这个包装那个调用:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {    
            PopulateControls();
        }
    }
于 2012-06-13T20:43:58.837 回答