我有一个ASP.Net页面,由几个Web部件组成(C# - ascx)。根据定义,我不知道页面上有多少Web部件。我不控制页面,只有我的部分恰好被添加到此页面。其他作者可能在同一页面上有部分内容,但现在这并不重要。
大多数网页部件用于显示和编辑信息。每个这样的部分都有自己的ValidationGroup和ValidationSummary,以及它自己的Save按钮。当前要求要求单独保存每个部件。这些部分可以全部相同或仅从三种变体中选择,但配置为显示来自数据库的不同数据子集。每个部分可能都有必填字段,使用RequiredFieldValidator。
另一种类型的Web部件用作标题/摘要。它几乎总是会出现一次,虽然它可能出现在页面的任何地方或(可能)出现不止一次。
我想要做的是在标题中显示摘要,页面上的哪些其他部分有未满足的要求。 (这将包括到相应部分的跳转链接,但我知道如何做到这一点。)来自标题部分的这段代码让我确定是否有任何部分有验证错误:
bool foundAnyInvalid = false;
Dictionary<string, bool> Parts = new Dictionary<string, bool>();
foreach (System.Web.UI.WebControls.BaseValidator val in Page.Validators)
{
if (!Parts.ContainsKey(val.ValidationGroup))
{
Parts.Add(val.ValidationGroup, true);
Page.Validate(val.ValidationGroup);
}
if (!val.IsValid)
{
Parts[val.ValidationGroup] = false;
foundAnyInvalid = true;
}
}
...但它会强制立即验证所有部件。因此,如果其他部件的要求失败,则无法保存单个部件。
我想要实现的目标是:
标题始终显示缺少验证的部分列表
所有细节部分都会显示所需字段旁边的典型红色*
如果单击“保存在特定详细信息”部分,该部分的Validator.Message和ValidatorSummary将显示典型消息。 (“需要Foo”)
如果用户在有效的部件上单击“保存”,即使其他部件仍然缺少数据,数据也应保存。
作为次要且有些相关的问题,标题包含“返回”链接。只要任何部分无效并保存,我想禁用此链接。如果在一个问题中这个问题太多了,我会另外问一下,但我想我应该提一下,以防它影响所提供的答案。 (我可能必须通过检查数据库而不是表单来验证这个。)
如果单击任何“保存”按钮,我会考虑保存所有部件,但我不能立即确定如何执行此操作。如果我以错误的方式来到这个页面,请不要犹豫告诉我。
答案 0 :(得分:0)
您是否尝试将ValidationGroup
设置为独特的内容?
我没有尝试过这个用于Web部件,但是对于单个ASPX页面,您可以使用ValidationGroup
来触发不同的验证。
<asp:TextBox runat="server" ID="textbox1" ValidationGroup="uniqueForThisPageValGroup1" />
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ValidationGroup="uniqueForThisPageValGroup1" ControlToValidate="textbox1" SetFocusOnError="True" ErrorMessage="Requires a value." /><br />
<asp:Button runat="server" ID="button1" Text="Submit" ValidationGroup="uniqueForThisPageValGroup1" /><br />
<hr />
<asp:TextBox runat="server" ID="textbox2" ValidationGroup="uniqueForThisPageValGroup2" />
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator2" ValidationGroup="uniqueForThisPageValGroup2" ControlToValidate="textbox2" SetFocusOnError="True" ErrorMessage="Requires a value." /><br />
<asp:Button runat="server" ID="button2" Text="Submit" ValidationGroup="uniqueForThisPageValGroup2" /><br />
将其添加到ASPX页面并尝试单击不同的“提交”按钮,您将看到它仅对匹配ValidationGroup
的那些按钮执行验证。