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

时间:2014-04-18 17:08:36

标签: c# asp.net sql-server-2008

我对编程非常陌生,并且在我之前有一个陡峭的学习曲线。

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

我在这里引用了几个有关堆栈溢出的帖子,这些帖子有助于此msdn link

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

我正在处理的第一个界面是基本的

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需要一个ScriptResourceMapping for'jquery'。”这里stack overflow link就是这个问题的答案。谢谢ericdc 我添加到我的web.config文件中:

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

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

已修复stack overflow link 代码背后更新。

修正Stack Overflow link

剩下的问题是: 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();
        }
    }

非常感谢任何帮助和指示。

谢谢。

1 个答案:

答案 0 :(得分:0)

问题是验证代码实际上从不查询数据库。这条线

  

string returnValue =“SELECT SER_NO FROM table WHERE SER_NO =”   + TB3.Text +“;”;

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

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