0

显示错误的页面

    DateTime startDate = DateTime.ParseExact(txtstart.Text, "MM/dd/yyyy", null);
    DateTime endDate = DateTime.ParseExact(txtend.Text, "MM/dd/yyyy", null);

    string n1 = DropDownList2.SelectedItem.Text;

    if (DropDownList1.SelectedItem.Text == "Membership")// here you can add selectedindex as well
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ProjectConnectionString"].ToString());
        con.Open();
        SqlDataAdapter adapter = new SqlDataAdapter("select p.Name,m.* from Membership_det m INNER JOIN Personal_det p  ON m.FID= p.FID where m.updateDate  between @Start and @End and m.FID =" + n1 + "", con);
        adapter.SelectCommand.Parameters.Add("@Start", SqlDbType.Date).Value = startDate;
        adapter.SelectCommand.Parameters.Add("@End", SqlDbType.Date).Value = endDate;
        DataTable dt = new DataTable();
        adapter.Fill(dt);
        con.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

        // you can use this datatable dt to get that items and use dt to bind the corresponding control.

    }

我需要日期验证码。它应该接受 mm/dd/yyyy 格式的日期,否则它应该给出错误消息

aspx 代码如下所示

    <asp:TextBox ID="txtstart" runat="server" ></asp:TextBox>


    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Please Enter in the date in MM/dd/yyyy Format" ControlToValidate="txtstart"></asp:RequiredFieldValidator>

    <asp:Label ID="Label2" runat="server" Text="End Date:"></asp:Label>

    <asp:TextBox ID="txtend" runat="server" ></asp:TextBox>
 <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Please Enter in the date in MM/dd/yyyy Format" ControlToValidate="txtend"></asp:RequiredFieldValidator>    

它提供调试消息并直接转到代码..运行程序时出现错误..我只想在页面本身中显示错误消息

4

4 回答 4

2

设置文本框 10 的 maxlength 属性,

<asp:TextBox ID="txtvaliddate" runat="server" MaxLength="10"></asp:TextBox>

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
                   ControlToValidate="txtvaliddate" ValidationExpression="^(([1-9])|(0[1-9])|(1[0-2]))\/((0[1-9])|([1-31]))\/((19|20)\d\d)$" Display="Dynamic" SetFocusOnError="true" ErrorMessage="invalid date">*</asp:RegularExpressionValidator>

在 c# 中,如果您需要指定要使用的日期格式,您将使用 DateTime.ParseExact (MSDN Article )

string[] formats= { "MM/dd/yyyy" }
DateTime dateTime = DateTime.ParseExact(txtstart.Text, formats, new CultureInfo("en-US"), DateTimeStyles.None);
于 2013-09-12T07:10:26.547 回答
1

它总是建议使用日期选择器控件而不是手动输入它 Ajax 日期控件

于 2013-09-12T07:26:45.803 回答
0

使用验证表达式

ValidationExpression="(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d)"
于 2013-09-12T07:13:52.350 回答
0

此处已显示的正则表达式将在客户端为您提供帮助,但您还需要在服务器端验证它们。

此外,您应该使用 DateTime.TryParse 而不是 DateTime.ParseExact,因为如果出现问题,第二个会抛出异常。

DateTime startDate; 
DateTime endDate;

if (DateTime.TryParse(txtstart.Text, out startDate) && DateTime.TryParse(txtend.Text, out endDate))
{
     string n1 = DropDownList2.SelectedItem.Text;

     if (DropDownList1.SelectedItem.Text == "Membership")
     {
      SqlConnection con = new 
SqlConnection(ConfigurationManager.ConnectionStrings["ProjectConnectionString"].ToString());
       con.Open();
      SqlDataAdapter adapter = new SqlDataAdapter("select p.Name,m.* from Membership_det m INNER JOIN Personal_det p  ON m.FID= p.FID where m.updateDate  between @Start and @End and m.FID =" + n1 + "", con);
      adapter.SelectCommand.Parameters.Add("@Start", SqlDbType.Date).Value = startDate;
      adapter.SelectCommand.Parameters.Add("@End", SqlDbType.Date).Value = endDate;
      DataTable dt = new DataTable();
      adapter.Fill(dt);
      con.Close();
      GridView1.DataSource = dt;
      GridView1.DataBind();                
      }
}
else
{ 
     //Show error message
}

我还将为 m.FID 参数的 SQL 查询添加另一个参数,就像您为 @Start 和 @End 添加的一样。这使您的代码容易受到 SQL 注入的攻击。

于 2013-09-12T11:49:54.803 回答