提交屏幕后,如何使DateTextBox(dojo)仍显示无效值日期?

时间:2011-05-17 03:31:32

标签: date dojo

我在我的网页中使用了来自dojo库的DateTextBox。 在DateTextbox中手动输入无效值然后提交屏幕后,此值消失:(。 我的想法是继续显示这个值,以便用户可以看到他们输入的错误值。 我怎么能这样做?

非常感谢任何帮助,

提前致谢:)

3 个答案:

答案 0 :(得分:0)

如果可以帮助你,请参阅c#中的这个简单代码。

//// In your code-behind:
//// String formate should ‘mm/dd/yyyy’
 if (!IsValidDate( dateFrom))
 {
     AlMessageBox.Show(this, "Invalide Date");
     this.txtDateFrom.Focus();
     return;
 }

 Proceed....
 .....

// String formate should ‘mm/dd/yyyy’
public static Boolean IsValidDate(string date)
{
  bool retValue = true;
  if (date == string.Empty)
  {
        return false;
  }
  if ((date.Split(‘/’).Length – 1) != 2) // Count the occurence of ‘/’ should be 2
  {
        return false;
  }

  int mon = date.Split(‘/’)[0].ToInt();
  int day = date.Split(‘/’)[1].ToInt(); 
  int yr = date.Split(‘/’)[2].ToInt();

  if (mon > 12 || mon == 0) // Validate month
  {
        return false;
  }
  int daysLimitInMonth = GetDaysInMonth(mon); 

  if (day > daysLimitInMonth || day == 0 )
  { 
        return false;
  }

  if (yr < 1000 ) // Bellow 1000 years is not invalid
  { 
        return false;
  }

  return retValue;
}

private static int GetDaysInMonth(int mon)
{
    int daysLimitInMonth = 31;

    switch (mon)
    { 
    case 2: // case month is Feb 
        if (IsLeapYear(mon)) // determine the year if is Leap Year
           daysLimitInMonth = 29;
        else
            daysLimitInMonth = 28;
        break;

    case 4: // April
        daysLimitInMonth = 30;
    case 6: // June
         daysLimitInMonth = 30;
    case 9: // Sept
         daysLimitInMonth = 30;
    case 11: // Nov
        daysLimitInMonth = 30;

    default:
        daysLimitInMonth = 31;
        break;
   }
   return daysLimitInMonth;
}

private static bool IsLeapYear(int year)
{
    if ((year % 400) == 0)
        return true;
    if ((year % 100) == 0)
        return false;
    if ((year % 4) == 0)
        return true;
    return false;
}

public class AlMessageBox
{
   private static Hashtable m_executingPages = new Hashtable();
   private MessageBox() { }
   public static void Show(string sMessage)
   {
      // If this is the first time a page has called this method then
      if (!m_executingPages.Contains(HttpContext.Current.Handler))
      {
         // Attempt to cast HttpHandler as a Page.
         Page executingPage = HttpContext.Current.Handler as Page;
         if (executingPage != null)
         {
            // Create a Queue to hold one or more messages.
            Queue messageQueue = new Queue();
            // Add our message to the Queue
            messageQueue.Enqueue(sMessage);
            // Add our message queue to the hash table. Use our page reference
            // (IHttpHandler) as the key.
            m_executingPages.Add(HttpContext.Current.Handler, messageQueue);
            // Wire up Unload event so that we can inject 
            // some JavaScript for the alerts.
            executingPage.Unload += new EventHandler(ExecutingPage_Unload);
         }
     }
     else
     {
         // If were here then the method has allready been 
         Queue queue = (Queue)m_executingPages[HttpContext.Current.Handler];
         // Add our message to the Queue
         queue.Enqueue(sMessage);
      }
 }

 public static void Show(System.Web.UI.Page page, string msg)
 {
     ScriptManager.RegisterClientScriptBlock(page, page.GetType(), 
     "clientScript", "javascript:alert('" + msg + "');", true);
 }

 private static void ExecutingPage_Unload(object sender, EventArgs e)
 {
     // Get our message queue from the hashtable
     Queue queue = (Queue)m_executingPages[HttpContext.Current.Handler];
     if (queue != null)
     {
        StringBuilder sb = new StringBuilder();
        // How many messages have been registered?
        int iMsgCount = queue.Count;
        // Use StringBuilder to build up our client slide JavaScript.
        sb.Append("<script language='javascript'>");
        // Loop round registered messages
        string sMsg;
        while (iMsgCount-- > 0)
        {
            sMsg = (string)queue.Dequeue();
            sMsg = sMsg.Replace("\n", "\\n");
            sMsg = sMsg.Replace("\"", "'");
            sb.Append(@"alert( """ + sMsg + @""" );");
        }
        // Close our JS
        sb.Append(@"</script>");
        // Were done, so remove our page reference from the hashtable
        m_executingPages.Remove(HttpContext.Current.Handler);
        // Write the JavaScript to the end of the response stream.
        HttpContext.Current.Response.Write(sb.ToString());
        }
   }
}

答案 1 :(得分:0)

感谢您的回复和评论。我认为您应该做的是创建一个新的弹出窗口,在单击提交按钮后保留“无效日期”消息。正如我在我的例子中所做的那样,我创建了一个类并称为“AlMessageBox.Show(this,”Invalid Date“)。一旦我编辑日期说'5/32/2011'然后提交,应该有一个弹出窗口'无效日期'然后,当我点击确定我输入的日期'5/32/2011'仍然存在

答案 2 :(得分:0)

enter image description here 嗨Yugi,很抱歉说我从未尝试过dojo的小部件,我在网页上做了什么来获得日期条目是 我使用AjaxControlToolkit来过滤有效的输入字符,该字符被tageted到我的日期文本框 如果你想尝试这个,你可以下载一个AjaxControlToolkit 应该使用哪个文件版本:3.0.20229.0

来自谷歌搜索。

您应该在解决方案项目中引用AjaxControlToolkit.dll文件。 然后注册:

请参阅客户端代码ViewProcessedClaims.aspx.cs

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewProcessedClaims.aspx.cs"
    Inherits="MedilinkSites.ViewProcessedClaims" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

然后在Body标签中: 例如:

<tr>
     <td>
          <asp:TextBox ID="txtDateFrom" runat="server" Width="70px" OnTextChanged="txtDateFrom_TextChanged"></asp:TextBox>
          <cc1:CalendarExtender PopupButtonID="ImageDatePicker" ID="CalFrom" TargetControlID="txtDateFrom"
             runat="server">
          </cc1:CalendarExtender>
          <cc1:FilteredTextBoxExtender ID="ftDateFrom" ValidChars="1234567890/" TargetControlID="txtDateFrom"
             runat="server">
          </cc1:FilteredTextBoxExtender>
             &nbsp;<asp:ImageButton ID="ImageDatePicker" runat="server" ImageUrl="images/Calendar.png"
             AlternateText="Click here to display calendar" Height="16px" />
      </td>
</tr>

在你提交button_click:

string dateFrom = this.txtDateFrom.Text;
if (!IsValidDate( dateFrom))  // Calling my previous function IsValidDate()
{
    AlMessageBox.Show(this, "Invalide Date");    // Calling my prev. pop-up message box
    this.txtDateFrom.Focus();
    return;
}

注意:只需将我之前的代码包含在我自己的代码中....

希望这可以帮助...... 的问候,

相关问题