使用带有验证器的母版页上的文本框和按钮
本文关键字:文本 按钮 母版页 验证 | 更新日期: 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方法。