1


我有这个问题:
在 UpdatePanel 中添加一个带有RequiredFieldValidator 的文本框。
然后在回发时将值添加到数据库并重定向到另一个页面。
我的问题是为什么当我添加一个 MyControl 并单击 GO 按钮时,ValidationSummary 不会停止回发,为什么在第二次单击 ValidationSummary 时触发?第二个问题是为什么VisualStudio找不到MyControl类(用红色下划线)但是当我编译结果没有错误?

这是代码:

默认.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>

默认.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/");
    }
}

我的控件.ascx

<asp:TextBox ID="txtLanguage" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rqrLanguage" runat="server" ErrorMessage="Language not set" ControlToValidate="txtLanguage"></asp:RequiredFieldValidator>
<br />

非常感谢达米亚诺

4

0 回答 0