我有一个web表单,其中包含许多操作DOM的javascript功能。
这是通过使用Ajax来调用一个服务来实现的,该服务将返回我必须做的任何事情,例如隐藏元素、层叠下拉列表、删除和向select中插入新项等。
除了一个特定的功能外,一切都按预期工作。此函数仅根据我的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调用的其他元素。返回的数据告诉我应该选择默认值并禁用select元素。这个很好用。但是,当我再次保存记录并在数据库中验证它时,在这种情况下默认值0不会被保存。记录保留在上一个选定项(“foo”)中。
如果您好奇,我将使用以下代码来完成此操作:
-
绑定Ajax调用
$('myElement').change(GetData);
-
GETDATA方法
$.ajax({
type: 'POST',
url: 'myUrl',
data: "{'id':'" + myIdFromMyElement + "'"}",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: OnSuccess,
error: OnError
});
-
根据返回的数据操作select元素:
function OnSuccess(data, textStatus) {
if (data.d.DisableMySelect2){
$('#mySelect2').val('0');
$('#mySelect2').attr('disabled', 'disabled');
}
}
为什么会这样?
编辑:
进一步的调查显示,我的web表单没有正确地解除绑定更改的值,但当我离开时
Request.Form["mySelect2"]
我实际上可以看到更新后的值,所以很明显客户机方面没有任何问题。