2012-03-01 10 views
0

私はいくつかのWebパーツ(C# - ascx)で構成されるASP.Netページを持っています。定義上、私はページ上にいくつのWebパーツがあるか分かりません。私はこのページに追加される私の部分だけ、ページを制御しません。同じページに他の作者による部分があるかもしれませんが、それは今は重要ではありません。有効なデータを持つWebパーツに他のWebパーツの検証エラーを表示しながら保存することを許可します

ほとんどのWebパーツは情報の表示と編集用です。このような各パーツには、独自のValidationGroupとValidationSummary、および独自のSaveボタンがあります。現在の要件では、各部品を個別に保存する必要があります。これらの部分は、すべて3つの品種から同じか、または選択されてもよいが、データベースから異なるデータのサブセットを表示するように構成されている。 RequiredFieldValidatorを使用して、各パートに必須のフィールドがある場合があります。

もう1つのタイプの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に標準的なメッセージが表示されます。

    • 有効なパーツでユーザーが[保存]をクリックすると、他のパーツにまだデータがない場合でもデータは保存されます。

    2番目の多少の関連問題として、ヘッダーには「戻る」リンクが含まれています。パーツが有効で保存されていない限り、このリンクを無効にします。 1つの質問でこれがあまりにも苦手な場合は、別途質問しますが、答えに影響を与える場合は、その点について言及する必要があります。 (私はフォームの代わりにデータベースをチェックすることでこれを検証する必要があります)

    [保存]ボタンがクリックされた場合、すべての部品を保存することを検討しますが、その方法をすぐには分かりません。私がこのページに間違った方法で来ているなら、私にもそれを教えることを躊躇しないでください。

  • 答えて

    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が一致するものに検証を実行することを確認できます。

    +0

    ページの各部分は、[保存]ボタンを含む一意のValidationGroupを使用します。私の問題は、ヘッダーがすべてのグループを呼び出すことです。 – Bruce

    関連する問題