1

问题描述:

我有一个带有下拉列表和文本框的简单对话框。根据下拉列表的值,所需的值可以是简单文本、日期或数据库中的特定文本。对于第一种情况,我拥有的简单文本框工作得很好。对于第二种情况,我需要一个日期选择器。对于第三种情况,我保留文本框,但在其上添加了自动完成功能。

我的问题是第二种情况。我尝试了 JQuery Datepicker,它工作正常,但我需要使用不同的(特定于框架的)datepicker,它是一个服务器端 Web UI 控件。

当从下拉列表中选择日期类型时,我隐藏文本框(使用 JQuery)并显示(隐藏的)日期选择器,反之亦然。隐藏效果很好,但是当我尝试保存时,服务器端保存功能无法识别 DatePicker 何时隐藏。我需要这样做的原因是因为我想知道何时保存 DatePicker 或 Textbox 中的值,具体取决于当前可见的值。

我尝试了所有与 css 相关的东西,而服务器似乎无法将这些属性识别为除真实之外的任何其他属性。

可能的解决方案:

1)我可以做一个“hack”解决方案并添加一个隐藏的文本框,并在每次切换日期选择器时在其中传递一个真假字符串。这样我可以在保存时检查文本框的值,以了解日期选择器是否隐藏。

2)另一个(目前正在测试它)是在我的 .cs 文件中创建一个 void 函数,该函数接受一个布尔输入并将一个自定义可见性属性设置为我将添加到日期选择器的框架中为真或假。每当我切换 datepicker 时,我都会使用 AJAX 调用来调用该函数并更改服务器端 datepicker 属性。但是我不知道这个属性是否会在我单击保存之前保持更改,或者它会以某种方式回到它的默认值。

我的问题: 上述任何解决方案对您来说都可以吗?为什么?你能想出一个更好的吗?

4

2 回答 2

1

我认为您最好的选择是始终在您的页面中拥有 3 个表单控件,并使用选择框的事件display使用 jquery 简单地切换它们的状态。change这样,您可以在表单验证期间简单地删除未使用的表单元素并提交使用的字段。

或者,您必须编写某种回发函数来处理每次change触发选择时重新打印表单的该部分。

- - 编辑 - -

这是您可以使用的表单验证示例:

$('form').submit(function(e){
    e.preventDefault();

    if($('select.group', this).val() == "datepicker"){
        // Remove the other elemnts from the DOM
        $('input.group, textbox.group').remove();
    }

    // Submit the form
    $(this).submit();
});

以下是该remove方法的 jQuery 文档:http: //api.jquery.com/remove/

于 2012-12-07T12:46:17.697 回答
0

为了结束这个问题,Infadelic 的评论解决了我的问题。为了更清楚,我将其发布为接受它的答案。

为什么不只区分下拉列表中的选择项?你有信息,你应该保存哪个值。

毕竟它比我预期的要简单。

于 2013-01-04T10:09:11.720 回答