如何确认没有选择更改事件的预选日期?

时间:2011-10-13 03:58:16

标签: c# asp.net c#-4.0 calendar

我的是c#web应用程序。 我有一个日历控件,默认为今天作为选定的日期。  问题是,如果用户点击所选日期,那么因为没有  更改SelectedChanged不会触发的日期。没有其他控制  发生的事件。如何确认用户选择a  预选日期?

protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {               
            if (ddlCityNames.SelectedIndex == 0 || ddlHotelNames.SelectedIndex == 0)
            {
                if(ddlCityNames.SelectedIndex==0)
                    Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Select City');", true);   
                else
                    Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Select Hotel');", true);
            }
           }

当用户更改他的选择时调用此方法。但是如果他选择了一个日期并且调用了这个验证,那么他之前做出的选择之后就是stil但是点击那个选择什么都不做。当我选择另一个时日期并在该日期再次出现,但是之前选择的日期呢?

1 个答案:

答案 0 :(得分:0)

查看您的代码,通过在客户端移植服务器端验证逻辑,您会更好。基本上,您必须连接到blur事件的支持输入(日历控制)并验证您的下拉菜单。这也将消除日期选择上的回复。

在服务器端,验证应该在将使用所有数据的地方完成 - 例如,如果您在酒店,城市和日期填写后调用搜索,则需要Search按钮。

编辑

这里有一些示例代码(基于jquery),可以帮助您入门。而不是Calender控件(我不熟悉它的标记),我假设你正在使用AJAX Toolkit Calender Extender或一些基于java脚本的UI,例如jquery date-picker,这将是我的首选方式)。使用这两种方法,您可以完全控制后备输入字段。

因此,使用AJAX工具包,标记将类似于

<asp:TextBox runat="server" ID="Date1" />
<ajaxToolkit:Calendar runat="server" TargetControlID="Date1" />

现在,您可以在标记(aspx)文件中使用以下脚本:

$(document).ready(function() {
   var date = $('#<%= Date1.ClientID %>');
   var city = $('#<%= ddlCityNames.ClientID %>');
   var hotel = $('#<%= ddlHotelNames.ClientID %>');

   date.blur(function() {
     // check if date has been selected
     if (date.val() != '') {
       if (city.val() == '') { // **** put value at index zero that you use for no-selection
          alert('Select City');
       }
       else if (hotel.val() == '') {
          alert('Select Hotel');
       }
     }
   });
});