さて、私はこの問題に 2 日間取り組んできましたが、まだ解決していません。テキストボックスをRegularExpressionValidationで検証したいと思います。
- ユーザーがドロップボックスから「はい」または「いいえ」を選択します
- はいの場合、ボタンをクリックして入力用のフォームを開きます
- すべてが必須というわけではありませんが、日付などを入力する場合は、適切な形式である必要があります。
- 有効な場合、ウィザードの [次へ] ボタンが再び表示され、新しいテキスト ボックスのセットが表示されます。注: 次のボタンが表示されるのは、すべてが有効な場合のみです。
私の主な問題は、「ページ」全体ではなく、このウィザードステップのみを検証することです
ボタンをクリックするたびにエラーが発生し続けますが、おそらく正規表現によるものです。検証():
System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
Source Error:
Line 590:
Line 591:
Line 592: addressRegEx.Validate(); <---Whats in red
Line 593: EmployerRequired.Validate();
Line 594: phoneRegex.Validate();
C#:
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < TotalNumberAddedEmployment; ++i)
{
addcontrolsemployment(i + 1);
}
if (Wizard1.ActiveStep == WizardStep3)
{
Button nxtButton = (Button)Wizard1.FindControl("StepNavigationTemplateContainerID$StepNextButton");
nxtButton.Visible = false;
}
}
public void addcontrolsemployment(int controlnumberEmp)
{
var newPanel = new Panel();
var employerLabel = new Label();
var addressLabel = new Label();
var phoneLabel = new Label();
var fromDateLabel = new Label();
var toDateLabel = new Label();
var supervisorLabel = new Label();
var jobTitleLabel = new Label();
var dutiesLabel = new Label();
var hoursLabel = new Label();
var wageLabel = new Label();
var leavingLabel = new Label();
var employerTextbox = new TextBox();
var addressTextbox = new TextBox();
var phoneTextbox = new TextBox();
var fromDateTextbox = new TextBox();
var toDateTextbox = new TextBox();
var supervisorTextbox = new TextBox();
var jobTitleTextbox = new TextBox();
var dutiesTextbox = new TextBox();
var hoursTextbox = new TextBox();
var wageTextbox = new TextBox();
var leavingTextbox = new TextBox();
// textbox needs a unique id to maintain state information
employerTextbox.ID = "EmployerTextBox_" + controlnumberEmp;
employerTextbox.Width = 250;
//employerTextbox.Text = "Enter Employer Here";
addressTextbox.ID = "AddressTextbox_" + controlnumberEmp;
addressTextbox.AutoPostBack = true;
phoneTextbox.ID = "phoneTextbox_" + controlnumberEmp;
phoneTextbox.AutoPostBack = true;
fromDateTextbox.ID = "fromDateTextbox_" + controlnumberEmp;
toDateTextbox.ID = "toDateTextbox_" + controlnumberEmp;
toDateTextbox.AutoPostBack = true;
supervisorTextbox.ID = "supervisorTextbox_" + controlnumberEmp;
supervisorTextbox.AutoPostBack = true;
jobTitleTextbox.ID = "jobTitleTexbox_" + controlnumberEmp;
jobTitleTextbox.AutoPostBack = true;
dutiesTextbox.ID = "dutiesTextbox_" + controlnumberEmp;
dutiesTextbox.Width = 250;
dutiesTextbox.AutoPostBack = true;
hoursTextbox.ID = "hoursTexbox_" + controlnumberEmp;
hoursTextbox.AutoPostBack = true;
wageTextbox.ID = "wageTexbox_" + controlnumberEmp;
wageTextbox.AutoPostBack = true;
leavingTextbox.ID = "leavingTexbox_" + controlnumberEmp;
leavingTextbox.Width = 250;
leavingTextbox.AutoPostBack = true;
//Label text
employerLabel.Text = "Employer: ";
addressLabel.Text = "Address: ";
phoneLabel.Text = "Phone #: ";
toDateLabel.Text = "To Date: ";
fromDateLabel.Text = "From Date: ";
supervisorLabel.Text = "Supervisor: ";
jobTitleLabel.Text = "Job Title: ";
dutiesLabel.Text = "Major Duties: ";
hoursLabel.Text = "Hours Per Week:";
wageLabel.Text = "Final Wage: ";
leavingLabel.Text = "Reason for Leaving: ";
//Regular Expression and Required field validators
var addressRegEx = new RegularExpressionValidator();
var EmployerRequired = new RequiredFieldValidator();
var phoneRegex = new RegularExpressionValidator();
var toDateRegex = new RegularExpressionValidator();
var fromDateRegex = new RegularExpressionValidator();
var supervisorRegex = new RegularExpressionValidator();
var jobTitleRegex = new RegularExpressionValidator();
var dutiesRegex = new RegularExpressionValidator();
var hoursRegex = new RegularExpressionValidator();
var wageRegex = new RegularExpressionValidator();
var leavingRegex = new RegularExpressionValidator();
EmployerRequired.Text = "Enter NA if No History";
EmployerRequired.ID = "employerRequired" + controlnumberEmp;
EmployerRequired.ControlToValidate = employerTextbox.ID;
EmployerRequired.ValidationGroup = "EmploymentValid";
addressRegEx.ValidationExpression = ".{0,50}";
addressRegEx.Text = "Please Enter less than 50 characters for address";
addressRegEx.ErrorMessage = "Please Enter less than 50 characters for address";
addressRegEx.ControlToValidate = addressTextbox.ID;
//addressRegEx.ValidationGroup = "EmploymentValid";
phoneRegex.ID = "phoneRegex" + controlnumberEmp;
phoneRegex.Text = "Please enter in (###)###-####";
phoneRegex.ControlToValidate = phoneTextbox.ID;
phoneRegex.ValidationExpression = @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}";
// phoneRegex.ValidationGroup = "EmploymentValid";
toDateRegex.ID = "toDateRegex" + controlnumberEmp;
toDateRegex.Text = "Please enter in MM/DD/YYY form";
toDateRegex.ValidationExpression=@"^(((0?[1-9]|1[012])/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)/(19|[2-9]\d)\d{2}|0?2/29/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$";
toDateRegex.ControlToValidate = toDateTextbox.ID;
// toDateRegex.ValidationGroup = "EmploymentValid";
fromDateRegex.ID = "fromDateRegex" + controlnumberEmp;
fromDateRegex.Text = "Please enter in MM/DD/YYY form";
fromDateRegex.ValidationExpression=@"^(((0?[1-9]|1[012])/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)/(19|[2-9]\d)\d{2}|0?2/29/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$";
fromDateRegex.ControlToValidate = fromDateTextbox.ID;
// fromDateRegex.ValidationGroup = "EmploymentValid";
supervisorRegex.ID = "supervisorRegex" + controlnumberEmp;
supervisorRegex.Text = "Please enter in 20 characters or less";
supervisorRegex.ValidationExpression = ".{0,20}";
supervisorRegex.ControlToValidate = supervisorTextbox.ID;
// supervisorRegex.ValidationGroup = "EmploymentValid";
jobTitleRegex.ID = "jobTitleRegex" + controlnumberEmp;
jobTitleRegex.Text = "Please enter 30 characters or less";
jobTitleRegex.ValidationExpression = ".{0,30}";
jobTitleRegex.ControlToValidate = jobTitleTextbox.ID;
// jobTitleRegex.ValidationGroup = "EmploymentValid";
dutiesRegex.ID = "dutiesRegex" + controlnumberEmp;
dutiesRegex.Text = "Please enter 60 characters or less";
dutiesRegex.ValidationExpression = ".{0,60}";
dutiesRegex.ControlToValidate = dutiesTextbox.ID;
// dutiesRegex.ValidationGroup = "EmploymentValid";
hoursRegex.ID = "hoursRegex" + controlnumberEmp;
hoursRegex.Text = "Please enter up to 3 digits";
hoursRegex.ValidationExpression = "[0-9]{0,3}";
hoursRegex.ControlToValidate = hoursTextbox.ID;
// hoursRegex.ValidationGroup = "EmploymentValid";
wageRegex.ID = "wageRegex" + controlnumberEmp;
wageRegex.Text = "Please enter in currency format";
wageRegex.ValidationExpression = @"(?n:(^\$?(?!0,?\d)\d{1,3}(?=(?<1>,)|(?<1>))(\k<1>\d{3})*(\.\d\d)?)$)";
wageRegex.ControlToValidate = wageTextbox.ID;
// wageRegex.ValidationGroup = "EmploymentValid";
leavingRegex.ID = "leavingRegex" + controlnumberEmp;
leavingRegex.Text = "Please enter 60 characters or less";
leavingRegex.ValidationExpression = ".{0,60}";
leavingRegex.ControlToValidate = leavingTextbox.ID;
// leavingRegex.ValidationGroup = "EmploymentValid";
// add the label and textbox to the panel, then add the panel to the form
newPanel.Controls.Add(new LiteralControl("<br />"));
//newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(new LiteralControl("<table border='2px'><tr>"));
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(new LiteralControl("<td class='title-text' >"));
newPanel.Controls.Add(employerLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'width='180px' colspan='2'>"));
newPanel.Controls.Add(employerTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(EmployerRequired);
newPanel.Controls.Add(new LiteralControl("</td></tr><tr><td class='title-text' >"));
newPanel.Controls.Add(addressLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(addressTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(addressRegEx);
newPanel.Controls.Add(new LiteralControl("</td>"));
newPanel.Controls.Add(new LiteralControl("<td class='title-text'>"));
newPanel.Controls.Add(phoneLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(phoneTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(phoneRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr><tr><td class='title-text'>"));
newPanel.Controls.Add(fromDateLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(fromDateTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(fromDateRegex);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(toDateLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(toDateTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(toDateRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr><tr><td class='title-text'>"));
newPanel.Controls.Add(supervisorLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(supervisorTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(supervisorRegex);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(jobTitleLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(jobTitleTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(jobTitleRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr><tr><td class='title-text'>"));
newPanel.Controls.Add(dutiesLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text' colspan='2'>"));
newPanel.Controls.Add(dutiesTextbox);//next to it
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(dutiesRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr><tr><td class='title-text'>"));
newPanel.Controls.Add(hoursLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(hoursTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(hoursRegex);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(wageLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(wageTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(hoursRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr><tr><td class='title-text'>"));
newPanel.Controls.Add(leavingLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text' colspan='2'>"));
newPanel.Controls.Add(leavingTextbox); // next to it
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(leavingRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr></table><br /><hr>"));
addressRegEx.Validate();
EmployerRequired.Validate();
phoneRegex.Validate();
toDateRegex.Validate();
fromDateRegex.Validate();
supervisorRegex.Validate();
jobTitleRegex.Validate();
dutiesRegex.Validate();
hoursRegex.Validate();
wageRegex.Validate();
leavingRegex.Validate();
if((EmployerRequired.IsValid) && (addressRegEx.IsValid) && (phoneRegex.IsValid) && (toDateRegex.IsValid) && (toDateRegex.IsValid) && (fromDateRegex.IsValid)&& (supervisorRegex.IsValid)&&(jobTitleRegex.IsValid)&&(dutiesRegex.IsValid)&&(hoursRegex.IsValid)&&(wageRegex.IsValid) && (leavingRegex.IsValid))
{
EmploymentPlaceHolder.Controls.Add(newPanel);
}
}
protected int TotalNumberAddedEmployment
{
get { return (int)(ViewState["TotalNumberAddedEmployment"] ?? 0); }
set { ViewState["TotalNumberAddedEmployment"] = value; }
}
protected void EmploymentButton_Click(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
Button nxtButton = (Button)Wizard1.FindControl("StepNavigationTemplateContainerID$StepNextButton");
nxtButton.Visible = false;
return;
}
else
{
// Increase the number added and add the new label and textbox
TotalNumberAddedEmployment++;
addcontrolsemployment(TotalNumberAddedEmployment);
Button nxtButton = (Button)Wizard1.FindControl("StepNavigationTemplateContainerID$StepNextButton");
nxtButton.Visible = true;
}
}
protected void ExperienceDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
if (ExperienceDropDownList.SelectedValue == "Yes")
{
Button nxtButton = (Button)Wizard1.FindControl("StepNavigationTemplateContainerID$StepNextButton");
nxtButton.Visible = false;
addcontrolsemployment(1);
}
else
{
Button nxtButton = (Button)Wizard1.FindControl("StepNavigationTemplateContainerID$StepNextButton");
nxtButton.Visible = true;
}
}