__DoPostback在执行部分回发时回发禁用控件的值

Win*_*ett 6 javascript asp.net ajax webforms asp.net-ajax

我有一个表单,为了隔离问题,它有大约十几个纯HTML复选框(不是WebControls),所有这些都被禁用.他们在里面UpdatePanel.

我有一个电话链接

__doPostBack('a-control','my-custom-argument');

根据我提供的第一个参数,页面可以执行完整postback或部分参数.

当我完成时postback,在帖子中没有提交任何复选框值(因为它们被禁用).这是正常的,因而也是期望的行为.

但是,当它执行部分操作时postback,脚本会从我的复选框中收集所有值并提交它们,而不指示哪些值被禁用,这会破坏我的代码.

这很烦人,我希望它表现得一致.反正有没有告诉.NET javascript处理程序以世界其他地方的方式工作,而不是 禁用的 HTML表单元素postback的值?

tho*_*rn̈ 2

我可以建议两个选择:

1) 您可以name在进行回发之前使用 JavaScript 删除禁用控件的属性。

2)Sys.WebForms.PageRequestManager.getInstance()._onFormSubmit使用更正的代码版本覆盖。只需复制实现MicrosoftAjaxWebForms.debug.js,添加属性的处理disabled并将更正后的函数附加到现有的 PageRequestManager 对象:

Sys.WebForms.PageRequestManager.getInstance()._onFormSubmit = 函数...

然后将此 JS 块注册为启动脚本。获得渲染脚本块的正确顺序非常重要。我在 ScriptManager 的子类中做了类似的事情:

protected override void OnResolveScriptReference(ScriptReferenceEventArgs e) {
    base.OnResolveScriptReference(e);

    if (e.Script.Name.StartsWith("MicrosoftAjax"))
        Page.ClientScript.RegisterStartupScript(GetType(), "My patch", MyPatchJs, true);
}
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!