测试null无法捕获代码隐藏

时间:2016-05-18 21:29:49

标签: c# asp.net gridview

使用C#ASP.NET Web表单。我试图在GridVew的页脚行中的文本框中测试空值,以避免在调用Insert()时出现SQL异常。

代码隐藏

        protected void gvTask_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "FooterInsert" && Page.IsValid)
            {
                GridViewRow gvr = gvTaskDashboard.FooterRow as GridViewRow;
                if (gvr == null) { return; }

                // Get Controls

                DropDownList ddlEmployee = gvTaskDashboard.Parent.FindControl("ddlEmployee") as DropDownList;

                TextBox txtProjectID = gvr.FindControl("txtNewProjectID") as TextBox;
                TextBox txtReleaseID = gvr.FindControl("txtNewReleaseID") as TextBox;
                DropDownList ddlTaskCode = gvr.FindControl("ddlNewTaskCode") as DropDownList;
                DropDownList ddlstatus = gvr.FindControl("ddlNewStatus") as DropDownList;
                DropDownList ddlPriority = gvr.FindControl("ddlNewPriority") as DropDownList;
                TextBox txtDueDate = gvr.FindControl("txtNewDueDate") as TextBox;
                TextBox txtNotes = gvr.FindControl("txtNewNotes") as TextBox;
                TextBox txtCompDate = gvr.FindControl("txtNewCompDate") as TextBox;

                // Test for nulls
                if (txtProjectID == null || txtReleaseID == null || txtDueDate == null)
                {
                    // Throw error message
                    ClientScript.RegisterStartupScript(this.GetType(), "error", "alert('Enter Project ID, Release ID, and Due Date.');", true);
                }

                else
                {
                    // Initialize Insert Parameters
                    TaskDashboardSQL.InsertParameters.Clear();

                    TaskDashboardSQL.InsertParameters.Add("EmployeeID", ddlEmployee.SelectedValue);
                    TaskDashboardSQL.InsertParameters.Add("ProjectID", txtProjectID.Text);
                    TaskDashboardSQL.InsertParameters.Add("ReleaseID", txtReleaseID.Text);
                    TaskDashboardSQL.InsertParameters.Add("TaskCodeID", ddlTaskCode.SelectedValue);
                    TaskDashboardSQL.InsertParameters.Add("TaskStatusID", ddlstatus.SelectedValue);
                    TaskDashboardSQL.InsertParameters.Add("TaskPriorityID", ddlPriority.SelectedValue);
                    TaskDashboardSQL.InsertParameters.Add("DueDate", txtDueDate.Text);
                    TaskDashboardSQL.InsertParameters.Add("Notes", txtNotes.Text);
                    TaskDashboardSQL.InsertParameters.Add("CompDate", txtCompDate.Text);

                    TaskDashboardSQL.Insert();
                }
            } // end FooterInsert
} // end gvTask_RowCommand

加载页面后,GridView将按预期显示。在页脚行中,我有ProjectID,ReleaseID,DueDate,Notes和CompDate的空文本框。其他字段的下拉列表。 Employee ID下拉列表在GridView外部的页面上进一步引用。

如果我填写项目ID,版本ID和截止日期,那么插入SQL就可以了。但是由于SQL表是使用NOT NULL构建的,如果它们保留为空,我会得到预期的SqlException,试图将NULL值插入到不允许空值的列中。

我尝试使用if (txtProjectID == null || txtReleaseID == null || txtDueDate == null)块捕获空值测试,但我仍然在TaskDashboardSQL.Insert()上捕获异常;在我的其他街区。

没有正确捕获空值的if()语句是否有问题?

编辑:我尝试使用if (txtProjectID.Text == null || txtReleaseID.Text == null || txtDueDate.Text == null)并在else子句中获得相同的SQLException。

1 个答案:

答案 0 :(得分:2)

您正在检查TextBox是否为null,这与检查其中Text是否有值有所不同。无论是否有人输入了任何内容,文本框都会显示出来。

请考虑评估txtProjectID.Text。此外,您可以使用string.IsNullOrWhitespace检查是否有人在其中放入一个空格或将其留空。