我有这个问题:
在UpdatePanel中添加一个带有RequiredFieldValidator的TextBox
然后在Postback中向DB添加值并重定向到另一个页面
我的问题是为什么当我添加一个MyControl并单击GO按钮时,ValidationSummary不会停止回发,为什么在第二次单击ValidationSummary火?
第二个问题是为什么VisualStudio找不到MyControl类(用红色下划线)但是当我编译结果时没有错误?
这是代码:
的Default.aspx 的
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test Validators</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="upAdd" runat="server">
<ContentTemplate>
<asp:Button ID="cmdAdd" runat="server" Text="Add" onclick="cmdAdd_Click" CausesValidation="false" />
</ContentTemplate>
</asp:UpdatePanel>
<hr />
<asp:UpdatePanel ID="upValidators" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="phValidators" runat="server"></asp:PlaceHolder>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="cmdAdd" />
</Triggers>
</asp:UpdatePanel>
<hr />
<asp:Button ID="cmdGo" runat="server" Text="Go" onclick="cmdGo_Click" />
</div>
<asp:ValidationSummary ID="valSum" HeaderText="Errors:" ShowSummary="False" ShowMessageBox="True" EnableClientScript="True" DisplayMode="BulletList" runat="server"></asp:ValidationSummary>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
List<int> m_oItems = new List<int>();
if (ViewState["ItemsAdded"] != null)
{
m_oItems = (List<int>)ViewState["ItemsAdded"];
}
ViewState["ItemsAdded"] = m_oItems;
foreach (int m_oItem in m_oItems)
{
MyControl m_oMyControl = (MyControl)LoadControl("MyControl.ascx");
phValidators.Controls.Add(m_oMyControl);
}
}
protected void cmdAdd_Click(object sender, EventArgs e)
{
List<int> m_oItems = new List<int>();
if (ViewState["ItemsAdded"] != null)
{
m_oItems = (List<int>)ViewState["ItemsAdded"];
}
m_oItems.Add(m_oItems.Count);
ViewState["ItemsAdded"] = m_oItems;
MyControl m_oMyControl = (MyControl)LoadControl("MyControl.ascx");
phValidators.Controls.Add(m_oMyControl);
}
protected void cmdGo_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
return;
//Add To DB
Response.Redirect("http://www.google.it/");
}
}
MyControl.ascx
<asp:TextBox ID="txtLanguage" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rqrLanguage" runat="server" ErrorMessage="Language not set" ControlToValidate="txtLanguage"></asp:RequiredFieldValidator>
<br />
非常感谢你 达米亚诺