フィールド検証が必要なユーザーコントロールがあります。単一の Web ページに、このユーザー コントロールの 2 つのインスタンスがあります。最初のユーザー コントロールのボタンをクリックすると、2 つのユーザー コントロールに対して検証メッセージが発行されます。ただし、そのユーザー コントロールの必須フィールドのみを起動する必要があります。誰でもこの問題を解決できますか。ありがとうマダビ
5 に答える
ユーザーコントロール内で RequiredFieldValidator の ValidationGroup プロパティを設定していない場合、ポストバックの原因となったボタンに関係なく、フォームが送信されるたびにフィールド検証が発生します。
特定のバリデーターを特定の送信ボタンに関連付ける場合は、それらを同じ ValdiationGroup に関連付ける必要があります。
ユーザー コントロール内で ValidatioGroup を設定しているが、コントロールのすべてのインスタンスに対して検証が実行されていることがわかった場合は、ユーザー コントロール インスタンスの属性を取得し、それを ValidationGroup に組み込んで、ユーザー コントロールが排他的に検証されるようにする必要があります。コントロールの送信ボタン。
以下に例を示します。
<asp:TextBox ID="txtTest" runat="server"/>
<asp:RequiredFieldValidator ID="txtTestReqVal"
runat="server"
Display="Dynamic"
ControlToValidate="txtTest"
Text="* Field is required"
ValidationGroup="valGroup<%= ClientId %>"
CssClass="modelError"
/>
<asp:Button ID="btnSubmit" runat="server"
Text="Submit"
CausesValidation="true"
ValidationGroup="valGroup<%= ClientId %>"
/>
ここでのコツは <%= ClientId %> の部分です。これにより、インスタンスのクライアント側の一意の ID が検証グループの値に挿入されます。これは、これらのコントロールのすべての検証が、ユーザー コントロールの単一の一意のインスタンスによってグループ化されることを意味します。このようにして、同じユーザー コントロールの複数のインスタンスを同じページに表示できますが、すべて一意に検証されます。
検証グループを runat="server" にします
次に、それぞれに次のような一意の検証グループを与えます。
string validationGroup = Guid.NewGuid().ToString();
txtContactNameValidator.ValidationGroup = validationGroup;
txtContactNumberValidator.ValidationGroup = validationGroup;
btnSave.ValidationGroup = validationGroup;
これにより、ページ上のユーザー コントロールの数に関係なく、ユーザー コントロールが互いに分離されます。
validatongroup
すべてのフィールド検証コントロールで属性を指定する必要があると思います。
各ユーザー コントロールには、独自の検証グループが定義されています。
これを解決する 1 つの方法は、検証グループ名で渡すことができるユーザー コントロールのパブリック プロパティを公開することです。
<uc:mycontrol id=u1 validationgroup="valA" .. />
<uc:mycontrol id=u2 validationgroup="valB" .. />
このアプローチの問題点の 1 つは、ユーザー コントロールのページ ロード内のすべての検証コントロールに検証グループを追加する必要があることです。
function ValidateRadio(button)
{
var radioOptions = document.getElementById(button.id.split("_")[0] +'_rblPollOptions');
var RVPollOptions = document.getElementById(button.id.split("_")[0] +'_RVPollOptions');
var options = radioOptions.getElementsByTagName("input");
var radioSelected=false;
for (j=0; j < options.length; j++)
{
if(options[j].checked)
{
radioSelected=true;
break; // Found it, proceed to next question
}
}
if (!radioSelected) // no option selected
{ // warn user, focus question //alert("You did not answer question");
RVPollOptions.style.visibility = "visible";
return false;
}
}
</script>
<asp:RequiredFieldValidator ID="RVPollOptions" runat="server" ControlToValidate="rblPollOptions"
ErrorMessage="Select option!"> </asp:RequiredFieldValidator>
<asp:Button ID="btnPoll" Text="Vote" OnClientClick="javascript:return ValidateRadio(this)" runat="server" OnClick="btnPoll_Click" />
検証グループは機能しないと思います..同じユーザーコントロールですが、ページに2回ドロップされているためです。ボタンのいずれかが両方のユーザー コントロールで検証を開始します。