使用带有验证器的母版页上的文本框和按钮

本文关键字:文本 按钮 母版页 验证 | 更新日期: 2023-09-27 17:58:53

我对编程很陌生,前方有一条陡峭的学习曲线。

我正在使用asp.net 4和C#创建一个与SQL Server 2008数据库(3)的新接口。

我在这里引用了几篇关于堆栈溢出的文章,这些文章以及这个msdn链接都有所帮助。

我创建了一个母版页,用户可以在其中选择哪个数据库。

我正在使用的第一个界面是一个基本的

SELECT * FROM (table) WHERE SER_NO = @SER_NO

用户在文本框(TB3)中输入一个6位数(int)。TB3将使用自定义验证器进行验证,以验证序列号是否在数据库中。如果找不到号码,我希望盒子变成红色,如果找到了,我希望它变成绿色(很好,不需要)。然后,用户单击一个按钮,在网格视图中显示该设备的所有记录。

我是否必须将文本框和验证器保持在显示它的同一页面上?

更新4/21

我已经将我的文本框和验证器移动到与显示器相同的页面。我在引用母版页中的文本框时遇到问题。有没有办法从主页面引用文本框,并在使用相同主页面的不同页面上显示结果?

我的显示页面代码现在看起来是这样的:

    <asp:TextBox id="TB3" Text="Ser. No." runat="server" />
    <asp:CustomValidator ID="Val_TB3" runat="server" ControlToValidate="TB3" OnServerValidate="Val_TB3_ServerValidate" ErrorMessage="Invalid Serial No." />
    <asp:GridView ID="MH_Grid" runat="server" AutoGertateColumns="true"></asp:GridView>
    <asp:button ID="btn_MH" runat="server" Text="Maint Hist" OnClick="btnMH_Click" />

然后我收到一个"WebForms UnobtrusiveValidationMode需要'jquery'的ScriptResourceMapping。"这里的堆栈溢出链接就是这个问题的答案。谢谢ericdc我在web.config文件中添加了:

    <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>

更新4/23收到的错误修复:通过重新创建事件并将代码粘贴回修复的按钮

固定堆栈溢出链接代码更新如下。

固定堆栈溢出链接

剩余问题包括:a.)使用母版页中的文本框和按钮。b.)验证器仅在所有按钮点击按钮时运行。

我的代码是:

    public partial class Main_Hist : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Val_TB3_ServerValidate(object source, ServerValidateEventArgs args)
        {
           string MHVal = TB3.Text;
           using (SqlConnection MH_con = new SqlConnection(configurationManager.ConnectionStrings["MainHist"].ConnectionString))
           {
               SqlCommand MH_Cmd = new SqlCommand("SELECT * FROM table WHERE SER_NO = @SERNO", MH_con);
               MH_con.Open();
               SqlDataReader reader = MH_Cmd.ExecuteReader();
               if(reader.HasRows)
               {
                   args.IsValid = true;
               }
               else
               {
                   args.IsValid = false;
               }
           }
        }
        protected void btnMH_Click(object sender, EventArgs e)
        {
            string MHSelect = "SELECT * FROM table WHERE SER_NO = @S_No";
            SQLConnection MHcon = SqlConnection(ConfigurationManager.ConnectionStrings["mainhist"].ConnectionString.ToString());
            MHcon.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(MHSelect, MH_con);
            adapter.SelectCommand.Parameters.AddWithValue("@S_No",TB3.Text);
            DataSet MHds = new DataSet();
            adapter.Fill(MHds);
            if (MHds.Tables.Count > 0)
            {
                MH_Grid.DataSource = MHds;
                MH_Grid.DataBind();
            }
            else
            {
                Console.WriteLine("Unable to connect to database.");
            }
            MHcon.Close();
        }
    }

任何帮助和建议都将不胜感激。

谢谢。

使用带有验证器的母版页上的文本框和按钮

问题是验证代码从未实际查询过数据库。线路

string returnValue="SELECT SER_NO FROM表WHERE SER_NO="+TB3.文本+";";

声明一个包含查询文本的字符串,但不执行查询。

要执行从数据库中检索单个值的查询,可以创建SqlCommand对象并调用其ExecuteScalar方法。