gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 05:17:09 26 4
gpt4 key购买 nike

我有一个表单,为了隔离问题,它有大约一打纯 HTML 复选框(不是 WebControls),所有这些都禁用。它们位于 UpdatePanel 中。

我有一个调用的链接

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

根据我提供的第一个参数,页面可能会执行完整的回发或部分回发。

当我执行完整的回发 时,没有任何复选框值在帖子中提交(因为它们被禁用)。这是正常,因此也是期望的行为。

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

这很烦人,我希望它的行为始终如一。无论如何告诉 .NET javascript 处理程序以世界其他地方的方式工作,回发 禁用 HTML 表单的值元素?

最佳答案

在我看来像是一个错误。根据this禁用的输入不应与表单一起提交。

这是我的完整测试页面:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="System.Web.UI.Page" EnableViewState="false" EnableEventValidation="false" Trace="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Test disabled checkboxes</title>
<script>
initState = false;
function disableCheckboxes(disabled) {
document.getElementById('foo').disabled = disabled;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" />

<asp:UpdatePanel runat="server">
<ContentTemplate>
<input runat="server" type="checkbox" id="foo" name="foo" checked="checked" /> Foo
<asp:Button ID="Inside" runat="server" Text="Submit Inside UpdatePanel" />
</ContentTemplate>
</asp:UpdatePanel>

<asp:Button ID="Outside" runat="server" Text="Submit Outside UpdatePanel" />
<br />
<button type="button" onclick="disableCheckboxes(initState=!initState)">Toggle checkboxes</button>
</form>
</body>
</html>

重现步骤:

  1. 打开 Fiddler 和测试页面。
  2. 单击“在 UpdatePanel 外部提交”(触发正常回发)。请注意,在 Fiddler 中,值 "foo=on" 在 POST 正文中提交。
  3. 点击“切换复选框”以禁用复选框。
  4. 再次单击“在 UpdatePanel 外部提交”。请注意参数 "foo" 从 POST 主体中省略。这是预期的。
  5. 单击“在 UpdatePanel 内提交”(触发部分回发)。请注意值 "foo=on" 出现在 POST 正文中,即使它应该被省略

该错误似乎存在于 MicrosoftAjaxWebForms.jsMicrosoftMvcAjax.js(以及 .debug 每个的对应物):

if ((type === 'text') ||
(type === 'password') ||
(type === 'hidden') ||
(((type === 'checkbox') || (type === 'radio')) && element.checked)) {
formBody.append(encodeURIComponent(name));
formBody.append('=');
formBody.append(encodeURIComponent(element.value));
formBody.append('&');
}

被序列化的元素的 disabled 属性被完全忽略,这违背了表单提交实现的规范和实际行为。

关于javascript - __DoPostback 在执行部分回发时回发禁用控件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1435403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com