【问题标题】:Legacy ASP.NET 1.1 with jQuery integration problem带有 jQ​​uery 集成问题的旧版 ASP.NET 1.1
【发布时间】:2009-03-02 17:25:11
【问题描述】:

我正在开发一个用 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 函数清除这些字段,我输入的值永远不会到达服务器。

【问题讨论】:

    标签: asp.net jquery vb.net asp.net-1.1


    【解决方案1】:

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

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

    【讨论】:

    • 我没有在服务器端禁用它们。我正在客户端上禁用它们,以便用户无法选择或输入值。
    • 非常好...谢谢。我使用“只读”而不是“禁用”,现在将值发送到服务器。我现在唯一的问题是“只读”在下拉列表中不起作用,所以我要么找到一个等效的 attr,要么在服务器上为选择做一些丑陋的手动工作。再次感谢
    猜你喜欢
    • 2014-07-10
    • 2012-12-07
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多