现在做一个B/S架构的人事系统,原来日期变化使用页面的Calendar事件处理,现在客户要求使用弹出窗口选择日期,我现在想在客户端检查到日期的改变,并调用服务器端的方法去处理,应该如何做?请各位高手现身指教。

解决方案 »

  1.   

    前段用Jsp写个日期输入方法不就可以了?
      

  2.   

    不是这个意思,应为日期变化时还要做数据库操作和页面其它控件的刷新。
    比如请假,用户输入开始日期,结束日期,服务器端查询数据库检查这段时间内那些是公休假日,结束日期-开始日期-公休假日数=请假天数,并把请假天数显示在页面上。
    原来我们是在Calendar控件里处理这些东西,现在客户要求把日历做在弹出窗口页面里,这样就难以触发服务器端的方法来做上述的这些处理了。
      

  3.   

    可以在窗体上放一个服务器Button  然后Width = 0px,并注册click服务器事件在接受日期值的控件上,比如是textbox  或者其他什么  注册onpropertychange客户段事件然后在这个客户段事件中,document.getElementById(服务器BUTTON的ID).click();这样就可以调用服务器BUTTON的事件了。需要的方法写到BUTTON_click就行了
      

  4.   

    用脚本写textbox的onchange事件啊:<input type="text" onchange="post()" onlick="selectDate()"><script>
    function selectDate()
    {
        //弹出窗口选择
    }function post()
    {
        //在这里还可以做一些客户端的逻辑检查    document.forms[0].submit();
    }
    </script>
      

  5.   

    to:h(t0h)
    你说的这个方法不知道行不行,我试试。这个onpropertychange在用户直接输入日期时应该会有问题,是不是要在加个判断,如果用户输入的是一个日期了,才调用服务器端的事件。
      

  6.   

    to:qpl007(蓝色闪电)
    非手动输入,不会触发onchange吧
      

  7.   

    不好意思,用onpropertychange<input type="text" onpropertychange="post()" onlick="selectDate()"><script>
    function selectDate()
    {
        //弹出窗口选择
    }function post()
    {
        //在这里还可以做一些客户端的逻辑检查    document.forms[0].submit();
    }
    </script>
      

  8.   

    感谢大家的回复,现在把修正后的相关代码贴出来大家共享
    //日期弹出窗口代码
    private void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
             System.Text.StringBuilder script = new StringBuilder();
             script.Append("<script language=javascript> \n");
    string fld = Request.QueryString["fld"].Trim();
    if(fld!="")
    {
                  script.Append("opener."+fld+ ".value='" +Calendar1.SelectedDate.ToShortDateString()+"';\n");
             }
    script.Append("opener." + fld + ".focus();\n");
    script.Append("opener." + fld + ".blur();\n");
    script.Append("close();\n");
    script.Append("</script>\n");
    Response.Write(script.ToString());
    }
    //日期检查
    function mycheckfield(str)

    str = KillSpace(str); 
    if(str == "")
     { return true; } 
    var pattern = /^((\d{4})|(\d{2}))[-\.\/](\d{1,2})[-\.\/](\d{1,2})$/g; if(!pattern.test(str)) 
    { return false; } 
    var ch=str.substring(4,5);
    var arrDate = str.split(ch);
    if(parseInt(arrDate[0],10) < 100)
    { arrDate[0] = 2000 + parseInt(arrDate[0],10) + ""; } 
    var date = new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]); if(date.getFullYear() == arrDate[0] && date.getMonth() == (parseInt(arrDate[1],10) -1)+"" && date.getDate() == arrDate[2])
     { return true; }
     else
     { return false; }
     }//给页面控件添加onblur客户端事件
    this.txtEndDate.Attributes.Add("onblur","return mycheckfield(this.value) && "+GetPostBackEventReference(btnDate,""));