我在我的网页中使用了来自dojo库的DateTextBox。 在DateTextbox中手动输入无效值然后提交屏幕后,此值消失:(。 我的想法是继续显示这个值,以便用户可以看到他们输入的错误值。 我怎么能这样做?
非常感谢任何帮助,
提前致谢:)
答案 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)
嗨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>
<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;
}
注意:只需将我之前的代码包含在我自己的代码中....
希望这可以帮助...... 的问候,