2

Click イベントから Button (Image Button) Delete に問題があります。これについて他にも質問があることは知っていますが、何も理解していません!

わからなかったので無回答!他のすべての質問で指定されているすべてのことを行いました! このページの他のイベントで、「リダイレクト」を例にするとうまくいきます!

私は明確ですか?詳細が必要ですか?スタック トレースまたはその他のコード?

エラーは次のとおりです。

ポストバックまたはコールバック引数が無効です。イベントの検証は、設定で使用するか、ページで <%@ Page EnableEventValidation="true" %> を使用して有効にします。セキュリティ上の理由から、この機能は、ポストバック イベントまたはコールバック イベントへの引数が、それらを最初にレンダリングしたサーバー コントロールから発信されていることを確認します。データが有効で期待される場合は、ClientScriptManager.RegisterForEventValidation メソッドを使用して、検証のためにポストバックまたはコールバック データを登録します。

マイページ:

<div id="Users" align="center">
        <asp:Button ID="btnCreate" class="btn" Font-Bold="true" runat="server" OnClick="btnCreate_OnClick" />
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" GridLines="None"
            CssClass="table table-bordered table-striped" HeaderStyle-Font-Size="14px">
            <Columns>
                <asp:BoundField DataField="UserName" />
                <asp:BoundField DataField="DisplayName" />
                <asp:BoundField DataField="Email" />
                <asp:BoundField DataField="ProfileName" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ID="btnEdit" ImageUrl="style/edit_16.png" runat="server" OnClick="btnEdit_OnClick" />
                        &nbsp;&nbsp;
                        <asp:ImageButton ID="btnDelete" ImageUrl="style/delete_16.png" runat="server" OnClick="btnDelete_OnClick" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </div>

私のイベント:

protected void btnDelete_OnClick(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    GridViewRow row = (GridViewRow)btn.NamingContainer;
    string UserName = row.Cells[0].Text;

    using (objConexao = new SqlConnection(strStringConexao))
    {
        using (objCommand = new SqlCommand(strDeleteUser, objConexao))
        {
            try
            {
                objConexao.Open();
                objCommand.Parameters.AddWithValue("@UserName", UserName);
                var objDataReader = objCommand.ExecuteReader();
            }
            finally
            {
                objConexao.Close();
            }
        }
    }
}

マイ Page_Load と CarregaGrid()

public void CarregaGrid()
{
    var listaRequest = new UsersNDR().ConsultUsers();
    if (listaRequest != null)
    {
        this.GridView1.DataSource = listaRequest;
        this.GridView1.DataBind();

        foreach (GridViewRow row in GridView1.Rows)
        {
            string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString();

            if (Session["idioma"].ToString() != null)
            {
                idioma = Session["idioma"].ToString();
            }

            ImageButton btnDelete = (ImageButton)row.FindControl("btnDelete");
            ImageButton btnEdit = (ImageButton)row.FindControl("btnEdit");
            btnDelete.ToolTip = Idioma.RetornaMensagem("btnDelete");
            btnEdit.ToolTip = Idioma.RetornaMensagem("btnEdit");
        }
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString();

    if (Session["idioma"].ToString() != null)
    {
        idioma = Session["idioma"].ToString();
    }

    Idioma.MudaCultura(idioma);
    btnCreate.Text = Idioma.RetornaMensagem("btnCreate");
    GridView1.Columns[0].HeaderText = Idioma.RetornaMensagem("UserName");
    GridView1.Columns[1].HeaderText = Idioma.RetornaMensagem("DisplayName");
    GridView1.Columns[2].HeaderText = Idioma.RetornaMensagem("email");
    GridView1.Columns[3].HeaderText = Idioma.RetornaMensagem("ProfileName");
    GridView1.Columns[4].HeaderText = Idioma.RetornaMensagem("Action");
    CarregaGrid();
}
4

1 に答える 1

6

I believe the fact that are re-binding the grid on every post back is the issue, try wrapping the grid altering logic in !IsPostBack, like this:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString();

        if (Session["idioma"].ToString() != null)
        {
            idioma = Session["idioma"].ToString();
        }

        Idioma.MudaCultura(idioma);
        btnCreate.Text = Idioma.RetornaMensagem("btnCreate");
        GridView1.Columns[0].HeaderText = Idioma.RetornaMensagem("UserName");
        GridView1.Columns[1].HeaderText = Idioma.RetornaMensagem("DisplayName");
        GridView1.Columns[2].HeaderText = Idioma.RetornaMensagem("email");
        GridView1.Columns[3].HeaderText = Idioma.RetornaMensagem("ProfileName");
        GridView1.Columns[4].HeaderText = Idioma.RetornaMensagem("Action");
        CarregaGrid();
    }
}
于 2013-08-14T16:45:43.163 に答える