我在aspx Web表单页面上看到了很多有关此错误的帖子。


  无效的回发或回调参数。使用配置或页面中的启用事件验证。为了安全起见,此功能验证回发或回调事件的参数源自最初呈现它们的服务器控件。如果数据有效且预期,请使用ClientScriptManager.RegisterForEventValidation方法以注册回发或回调数据以进行验证。


我的问题似乎有所不同。我读过的所有帖子似乎都与网格视图,下拉列表以及在Page_Load事件之外加载的其他控件有关。

在这种情况下,我会通过简单的Button单击得到此错误:

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />


Button1_Click只是调用一个简单的方法。

现在,在此Codebehind文件中,我确实有2个WebMethod,它们从jQuery Ajax中的另一个下拉列表值加载一个下拉列表。我暴露了WebMethods的事实是否是错误的问题?

现在,该页面上的所有Click事件都被阻止。

这是jQuery和WebMethod代码。

<script type="text/javascript">

    $("#<%= ddlJobNumber.ClientID %>").change(function (e) {

        var jobNumber = $(this).val();
        FillPhaseCode(jobNumber);
        SetDescription(jobNumber);
    });

    function FillPhaseCode(jobNumber)
    {

        $.ajax({
            type: "POST",
            <%--//url: '<% ResolveUrl("~/Pages/JobTimecard.aspx/FillPhaseCode"); %>',--%>
            url: "JobTimecard.aspx/FillPhaseCode",
            contentType: "application/json; charset=utf-8",
            data: '{"jobNumber":"' + jobNumber + '"}',
            dataType: "json",
            success: function (result) {
                $("#<%= ddlPhaseCode.ClientID %>").empty();

                $.each(result.d, function (key, value) {
                    $("#<%= ddlPhaseCode.ClientID %>").append("option value='0'>Select</option>");
                    $("#<%= ddlPhaseCode.ClientID %>").append($("<option></option>").val(value.PhaseCode).html(value.PhaseDesc));

                });

            },
            error: function ajaxError(result) {
                alert("Error result: " + result.status);
            }
        });
    }

    function SetDescription(jobNumber)
    {
        $.ajax({
            type: "POST",
            url: "JobTimecard.aspx/SetJobDescription",
            contentType: "application/json; charset=utf-8",
            data: '{"jobNumber":"' + jobNumber + '"}',
            dataType: "json",
            success: function (result) {
                $("#<%= lblJobName.ClientID %>").text(result.d);
            },
            error: function ajaxError(result) {
                alert("Error result: " + result.status);
            }
        });
    }

</script>

public class PhaseCodes
    {
        public string PhaseCode { get; set; }
        public string PhaseDesc { get; set; }
    }

    [WebMethod]
    public static List<PhaseCodes> FillPhaseCode(string jobNumber)
    {

        SpectrumSim clsSpectrum = new SpectrumSim();
        DataTable dt = new DataTable();
        dt = clsSpectrum.GetPhaseCodes(jobNumber, "1");
        List<PhaseCodes> list = new List<PhaseCodes>();
        foreach (DataRow dr in dt.Rows)
            list.Add(new PhaseCodes
            {
                PhaseCode = dr["Phase_Code"].ToString(),
                PhaseDesc = dr["Description"].ToString()
            });
        return list;
    }

    [WebMethod]
    public static string SetJobDescription(string jobNumber)
    {
        DataTable dt = new DataTable();
        SpectrumSim clsSpectrum = new SpectrumSim();
        dt = clsSpectrum.GetJobNumbers();
        var dataRow = dt.AsEnumerable().Where(x => x.Field<string>("Job_Number") == jobNumber).FirstOrDefault();
        string description = dataRow["Job_Description"].ToString();
        return description;
    }


我希望事情就这么简单,但是我找不到问题。

编辑:
这是我的页面加载事件

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FillJobNumberDropdown();
            if (TimeId != 0)
            {
                LoadTimecard();
            }
        }
    }

最佳答案

我猜想在PostBack Web窗体上检测到服务器端DropDownList中的一个值,该值不被识别为有效选项,因为您正在向客户端添加选项。

客户端更改的DropDownList是否需要作为服务器端控件?

如果是这样,您将需要在Page_Load(例如Page_Init)之前在PostBack上填充相同的选项,以便它可以识别所选的选项。

或者,改用非服务器端HTML控件,并使用Request.Form获取选定的值。

关于c# - 无效的回发或回调参数-Button OnClick,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48895528/

10-09 13:21