ASP.NET updatepanel + неверный постбэк - PullRequest
0 голосов
/ 23 февраля 2010

У меня есть следующая очень простая форма:

<asp:UpdatePanel ID="ClaimRewardsForm" runat="server">
    <ContentTemplate>
        <span class="largeBold">Select jacket weight:</span><br />
        <asp:RadioButtonList runat="server" ID="JacketWeight">
            <asp:ListItem Value="Lightweight" Text="Lightweight (fleece)" />
            <asp:ListItem value="Heavyweight" Text="Heavyweight (cotton)" />                                
        </asp:RadioButtonList>
        <br />
        <span class="largeBold">Select size:</span><br />
        (Men's sizes only)<br />
        <asp:DropDownList ID="JacketSize" runat="server">
            <asp:ListItem Value="Small" Text="Small" />
            <asp:ListItem Value="Medium" Text="Medium" />
            <asp:ListItem Value="Large" Text="Large" />
        </asp:DropDownList><br />
        <br />
        <asp:ImageButton ID="SubmitButton" runat="server" ImageUrl = "~/Content/Images/submitButton.png" onclick="SubmitButton_Click" />
    </ContentTemplate>
</asp:UpdatePanel>       

В обработчике нажатия моей кнопки у меня есть:

protected void SubmitButton_Click(object sender, EventArgs e)
{
    if (IsValid)
    {
        using (var work = UnitOfWorkFactory.Create())
        {
            var id = new Guid(Session["id"].ToString());
            var account = UserAccounts.Get(id);

            if (account == null)
                throw new Exception("Invalid user account id.");

            account.RewardInfo.Clear();
            account.RewardInfo.Add(new RewardInfo()
            {
                UserAccount = account,
                JacketWeight = JacketWeight.SelectedValue,
                JacketSize = JacketSize.SelectedValue
            });

            work.Commit();
        }

        //ClaimRewardsForm.Update();
        //ScriptManager.RegisterStartupScript(this, GetType(),
        //    "confirmation", "ClaimRewards.showConfirmation();", true);
    }
}

Я никоим образом не изменяю поля формы, но все равно получаю следующую ошибку:

505|error|500|Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.|

Поскольку я вообще не изменяю элементы управления во время поста, я не могу понять, почему он действует так, как будто я это сделал. Есть мысли?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2010

Глупый я. Я использую адаптер DropDownList, чтобы разрешить элементы группы опций в моем списке, но это вызывало недопустимую обратную передачу, потому что он изменяет элементы в списке за кулисами, не регистрируя измененные значения для проверки события. Я изменил адаптер, чтобы выполнить регистрацию, и теперь он работает нормально.

0 голосов
/ 23 февраля 2010

Этот парень здесь - ваш преступник. Вам нужно выяснить, что вы публикуете, чтобы блокировать запрос или отключить EventValidation, если вы понимаете угрозы безопасности.

Я не вижу ничего в опубликованном вами коде, но <> в значениях параметров наверняка с этим не справится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...