Я пытаюсь написать try/catch, и, очевидно, не получается. Я не уверен, что полностью понимаю try/catch, но я знаю, что у меня возникают проблемы, обматывающие то, что мне нужно, чтобы убедиться, что правильная дата вводится через форму. Я хочу сказать, что это должно быть в формате DateTime, а не в строке, и должно быть (MM/dd/yyyy), но эта попытка/проверка вещи бросает меня за цикл.Как использовать try/check для DateTime, чтобы предотвратить ошибку сервера?
Инструкция: Вернитесь к коду проверки, который был добавлен в frmPersonnel коде и добавить TRY/поймать с логикой, чтобы предотвратить недопустимые дату причинения ошибки сервера.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class frmPersonnel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
btnSubmit.Click += new EventHandler(this.btnSubmit_Click);//event for button
}
private void btnSubmit_Click(object sender, EventArgs e)
{
//DECLARATIONS
int count = 0;
string Msg = "You must enter a value in the following fields: <br/> ";
Boolean validatedState = true;
Boolean validateEntry = false;
DateTime endDate = new DateTime(2016, 03, 01);
DateTime startDate = new DateTime(2016, 03, 01);
//BEGIN SERIES OF IF/ELSE FOR CONFIRMING ENTRIES
if (Request["txtFirstName"].ToString().Trim() == "")
{
//displays yellow bg for missing input
txtFirstName.BackColor = System.Drawing.Color.Yellow;
Msg = Msg + "First Name <br/> ";
}//endif
else
{
txtFirstName.BackColor = System.Drawing.Color.White;
count += 1;
}//end else
if (Request["txtLastName"].ToString().Trim() == "")
{
//displays yellow bg for missing input
txtLastName.BackColor = System.Drawing.Color.Yellow;
Msg = Msg + "Last Name <br/> ";
}//endif
else
{
txtFirstName.BackColor = System.Drawing.Color.White;
count += 1;
}//end else
if (Request["txtPayRate"].ToString().Trim() == "")
{
//displays yellow bg for missing input
txtPayRate.BackColor = System.Drawing.Color.Yellow;
Msg = Msg + "Pay Rate <br/> ";
}//endif
else
{
txtFirstName.BackColor = System.Drawing.Color.White;
count += 1;
}//end else
if (Request["txtStartDate"].ToString().Trim() == "")
{
//displays yellow bg for missing input
txtStartDate.BackColor = System.Drawing.Color.Yellow;
validateEntry = false;
Msg = Msg + "Start Date <br/> ";
}//endif
else
{
try
{
//Conversion to DateTime format?
startDate = DateTime.Parse(Request["txtStartDate"]);
//How do I write the format I want, and when it should be checked?
}
catch (Exception ex)
{
//Exception should be caught here, not sure how to write this out though?
}
validateEntry = true;
}//end else
if (Request["txtEndDate"].ToString().Trim() == "")
{
//displays yellow bg for missing input
txtEndDate.BackColor = System.Drawing.Color.Yellow;
validateEntry = false;
Msg = Msg + "End Date <br/> ";
}//endif
else
{
try
{
//Conversion to DateTime format?
endDate = DateTime.Parse(Request["txtEndDate"]);
//How do I write the format I want, and when it should be checked?
}
catch (Exception ex)
{
//Exception should be caught here, not sure how to write this out though?
}
validateEntry = true;
}//end else
//END SERIES OF IF/ELSE FOR CONFIRMING ENTRIES
//START IF VALIDATE ENTRY
if (validateEntry == true)
{
if (DateTime.Compare(startDate, endDate) >= 0)
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
txtEndDate.BackColor = System.Drawing.Color.Yellow;
Msg = Msg + "Start Date <br/>" + "End Date <br/> <br/>The end date must be a later date than the start date.";
//The Msg text will be displayed in lblError.Text after all the error messages are concatenated
validatedState = false;
//Boolean value - test each textbox to see if the data entered is valid, if not set validState=false.
//If after testing each validation rule, the validatedState value is true, then submit to frmPersonnelVerified.aspx, if not, then display error message
}
else //goes to this if dates are correct
{
validatedState = true;
count += 2;
txtStartDate.BackColor = System.Drawing.Color.White;
txtEndDate.BackColor = System.Drawing.Color.White;
}
}
//END IF VALIDATE ENTRY
//SENDS DATA & ERROR MESSAGES
if (count == 5 && validatedState == true)
{
Session["txtFirstName"] = txtFirstName.Text;
Session["txtLastName"] = txtLastName.Text;
Session["txtPayRate"] = txtPayRate.Text;
Session["txtStartDate"] = txtStartDate.Text;
Session["txtEndDate"] = txtEndDate.Text;
Response.Redirect("frmPersonnelVerified.aspx");
//sends to other page
}
else
{
//Writes out error messages
Response.Write("<br/><span style = 'color: red ; position: absolute; top: 360px; left: 90px;'>" + Msg + "</span>");
}
//ENDS DATA AND ERROR MESSAGES
}//end Function: private void BtnSubmit_click...
}
DateTime.TryParseExact? –
Во-первых, 'DateTime.TryParse()' может быть больше того, что вы ищете, оно не генерирует исключение при неудачном анализе. Кроме того, что именно проблема, которую вы видите? У вас есть пустые блоки catch, что означает, что вы на самом деле ничего не делаете в случае исключения и просто игнорируете его полностью. Это то, что вы хотели сделать? Какова конкретная проблема? – David
Это все, что требуется? Я имею в виду, я попробую прямо сейчас, но я ужасно смущен тем, как работает вся попытка/уловка. – Sierra