回传表单时,客户端元素不会更新

时间:2009-06-22 01:07:55

标签: asp.net jquery data-binding

我有一个Web表单,其中包含许多用于操作DOM的JavaScript功能。 这是通过使用AJAX调用一个服务来实现的,该服务将返回给我任何我必须做的事情,例如隐藏元素,级联下拉,删除和插入新项目等等。

除了一个特定功能外,一切都按预期工作。此函数仅根据我的AJAX调用返回的内容禁用和设置select元素中的默认值。例如,假设我从以下选择中选择了“foo”并保存了记录:

<select id="mySelect2">
  <option value="0">Default</option>
  <option value="foo">Foo</option>
  <option value="another_foo">Foo 2</option>
</select>

大!现在我已经更改了我的Web表单中触发了我的AJAX调用的其他元素。返回的数据告诉我应该选择Default并禁用select元素。这很好用。但是,当我再次保存记录并在DB中验证时,默认值0在这种情况下没有被保存。记录保留在上一个选定项目(“foo”)。

如果您好奇,我使用以下代码来完成此任务:

  1. 绑定AJAX调用

    $('myElement').change(GetData);
    
  2. GetData方法

    $.ajax({
        type: 'POST',
        url: 'myUrl',
        data: "{'id':'" + myIdFromMyElement + "'"}",
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: OnSuccess,
        error: OnError
    });
    
  3. 根据返回的数据处理select元素:

    function OnSuccess(data, textStatus) { 
        if (data.d.DisableMySelect2){
            $('#mySelect2').val('0');
            $('#mySelect2').attr('disabled', 'disabled');
        }
    }
    
  4. 为什么会这样?

    修改

    进一步的调查表明,我的网页表单没有正确解除更改后的值,但是当我去Request.Form["mySelect2"]时,我实际上可以看到更新的值,所以显然客户端没有任何问题。

1 个答案:

答案 0 :(得分:2)

我认为这种情况正在发生,因为disabled的表单元素未随表单一起提交。

您可能希望通过AJAX调用处理表单提交,或使用隐藏的输入来存储禁用的SELECT元素的所选选项的值。