0

我正在开发一个用 VB.NET 为 ASP.NET 1.1 编写的遗留 Web 应用程序。一个特定页面有一个包含多个字段的表单。为了响应下拉框更改值,我正在清除一些字段,将一些下拉框重置为第一个选项,并在 UI 中将它们全部设置为“禁用”。为此,我正在使用 jQuery。我向所有这些字段添加了一个 CSS 类,然后我的 jQuery 选择器类似于以下内容:$("*.my-css-class"). 这是一些示例代码来解释。

var fields = $("*.fields");
if (some_condition) {
    fields.val("");
    fields.attr("selectedIndex", 0);
    fields.attr("disabled", "disabled");
}

UI 响应上述 js 代码按预期更新,但是当我回发页面以响应按钮单击时,原始值仍保留在与这些控件相关的服务器端。例如,txtSomething 是具有 CSS 类“字段”的字段之一(因此它将被上面的 jQuery 选择器选中)。用户在此文本框中键入“1234”并提交表单。要么将相同的页面回发回自身并保留其值,要么我返回此页面并在服务器端预填充值(例如,用户单击摘要页面上的“编辑”按钮),因此控件 txtSomething 被初始化在值为“1234”的客户端上。我的 jQuery 代码会清除用户在 UI 中看到的值,然后用户单击提交按钮。如果我使用 jQuery 选择器查询该值,则该字段的值是一个空字符串。当页面被回发并且我正在单步执行代码(或使用此控件的值做某事)时,它仍然是“1234”。

非常重要的一点是,这些值在提交一次后会被发送回浏览器。因此,想象一个正在提交的表单,或者这些值在服务器端绑定或设置并输出到预先填充的浏览器的任何情况(而不是使用默认值或空值输出到浏览器)。如果我默认加载页面(空文本框),输入一些文本,然后触发 js 函数清除这些字段,我输入的值永远不会到达服务器。

4

1 回答 1

1

为什么需要禁用这些字段?禁用控件可以使它们无法将值发布到服务器......至少当 asp.net 控件被禁用服务器端时会发生这种情况。

更新1:不能怀疑它是否只是服务器端,所以我查了一下:) http://www.w3.org/TR/html401/interact/forms.html#h-17.12.1。 ..“在本例中,INPUT 元素被禁用。因此,它无法接收用户输入,也不会随表单提交其值。”,所以我是对的,即使在客户端禁用它也不会发布值

于 2009-03-02T17:44:53.503 回答